Files

56 lines
1.9 KiB
C#
Raw Permalink Normal View History

2026-07-08 19:53:15 +08:00
using UnityEngine;
namespace Inventory
{
public class ItemPickup : MonoBehaviour, IInteractable
{
[Header("物品配置")]
[Tooltip("这个物体对应的物品数据")]
[SerializeField] private ItemData itemData;
[Tooltip("拾取数量")]
[SerializeField] private int amount = 1;
public void Interact()
{
// 1. 安全检查
if (itemData == null)
{
Debug.LogError($"[ItemPickup] 物体 {gameObject.name} 缺少 ItemData 配置!");
return;
}
// 2. 添加到背包
// 注意:我们直接使用单例 Instance,确保场景里有 InventorySystem 挂在玩家身上
if (InventorySystem.Instance != null)
{
bool isPickedUp = InventorySystem.Instance.Add(itemData, amount);
if (isPickedUp)
{
// 3. 视觉反馈 (可选:播放音效或特效)
Debug.Log($"[Pickup] 捡起了 {amount} 个 {itemData.displayName}");
// 4. 销毁场景物体
Destroy(gameObject);
}
else
{
Debug.LogWarning("[Pickup] 背包已满,无法拾取!");
// 这里可以播放一个“背包已满”的提示音效或 UI 提示
}
}
else
{
Debug.LogError("[ItemPickup] 场景中找不到 InventorySystem!请确保玩家身上挂载了该组件。");
}
}
// 这里的 GetInteractPrompt 是可选的,如果你的 UI 脚本需要显示 "按 F 拾取 [苹果]"
public string GetInteractPrompt()
{
string itemName = itemData != null ? itemData.displayName : "物品";
return $"拾取 {itemName}";
}
}
}