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}"; } } }