61 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|
|
} |