using UnityEngine; using UnityEngine.Events; using Inventory; // 引用 ItemData 所在的命名空间 namespace Project.Interaction { /// /// 监听特定物品的“使用”(左键点击)操作,并在触发时执行相应的事件。 /// 可以设置为仅触发一次。 /// public class ItemUseEventTrigger : MonoBehaviour { [Tooltip("需要监听使用的目标物品")] public ItemData targetItem; [Tooltip("是否只允许触发一次?")] public bool triggerOnlyOnce = true; [Tooltip("当该物品被使用时触发的事件")] public UnityEvent onTargetItemUsed; private bool hasTriggered = false; private void OnEnable() { // 订阅全局的物品使用事件 ItemUsageSystem.OnItemUsedGlobal += HandleItemUsed; } private void OnDisable() { // 取消订阅 ItemUsageSystem.OnItemUsedGlobal -= HandleItemUsed; } private void HandleItemUsed(ItemData itemData) { if (targetItem == null) return; // 检查是不是我们关心的那个物品 if (itemData == targetItem) { if (triggerOnlyOnce && hasTriggered) { return; // 已经触发过了,且设置为只触发一次,直接返回 } hasTriggered = true; onTargetItemUsed?.Invoke(); } } /// /// 用于在运行时手动重置触发状态 /// public void ResetTrigger() { hasTriggered = false; } } }