Files
Echo/Assets/_Project/Scripts/Interaction/ItemUseEventTrigger.cs
T
2026-07-08 20:42:51 +08:00

61 lines
1.7 KiB
C#

using UnityEngine;
using UnityEngine.Events;
using Inventory; // 引用 ItemData 所在的命名空间
namespace Project.Interaction
{
/// <summary>
/// 监听特定物品的“使用”(左键点击)操作,并在触发时执行相应的事件。
/// 可以设置为仅触发一次。
/// </summary>
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();
}
}
/// <summary>
/// 用于在运行时手动重置触发状态
/// </summary>
public void ResetTrigger()
{
hasTriggered = false;
}
}
}