Files
WhaleAdventure_VR/Assets/My project/Inventory/Scripts/ItemPickup.cs
skrwns304@gmail.com b1e85a5b89 2026-06-19 UI, UI로직
2026-06-19 14:27:40 +09:00

81 lines
2.1 KiB
C#

using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// 월드에 떠 있는 아이템 오브젝트를 직접 주울 때 사용합니다.
/// Collider의 Is Trigger를 켜고, Player 태그와 충돌하면 인벤토리에 추가됩니다.
/// </summary>
[DisallowMultipleComponent]
public class ItemPickup : MonoBehaviour
{
[Header("Reference")]
[SerializeField] private InventoryManager inventoryManager;
[Header("Item")]
[SerializeField] private InventoryItemType itemType = InventoryItemType.Fish;
[SerializeField] private int amount = 1;
[Header("Pickup Settings")]
[SerializeField] private string playerTag = "Player";
[SerializeField] private bool destroyAfterPickup = true;
[SerializeField] private bool disableAfterPickup = false;
[SerializeField] private bool autoFindManager = true;
[Header("Events")]
public UnityEvent onPickedUp;
[Header("Debug")]
[SerializeField] private bool showDebugLog = true;
private bool pickedUp;
private void Awake()
{
if (inventoryManager == null && autoFindManager)
inventoryManager = FindFirstObjectByType<InventoryManager>();
}
private void OnTriggerEnter(Collider other)
{
if (pickedUp)
return;
if (!other.CompareTag(playerTag))
return;
PickUp();
}
public void PickUp()
{
if (pickedUp)
return;
pickedUp = true;
if (inventoryManager == null)
{
Debug.LogWarning("[ItemPickup] InventoryManager가 연결되지 않았습니다.");
pickedUp = false;
return;
}
int addAmount = Mathf.Max(1, amount);
inventoryManager.AddItem(itemType, addAmount);
onPickedUp?.Invoke();
if (showDebugLog)
Debug.Log($"[ItemPickup] {itemType} +{addAmount}");
if (destroyAfterPickup)
Destroy(gameObject);
else if (disableAfterPickup)
gameObject.SetActive(false);
}
public void ResetPickup()
{
pickedUp = false;
}
}