2026-06-19 UI, UI로직
This commit is contained in:
80
Assets/My project/Inventory/Scripts/ItemPickup.cs
Normal file
80
Assets/My project/Inventory/Scripts/ItemPickup.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user