using UnityEngine; using UnityEngine.Events; /// /// 월드에 떠 있는 아이템 오브젝트를 직접 주울 때 사용합니다. /// Collider의 Is Trigger를 켜고, Player 태그와 충돌하면 인벤토리에 추가됩니다. /// [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(); } 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; } }