using System.Linq; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; namespace AibisDream.Framework { /// /// EventTrigger扩展 /// [RequireComponent(typeof(Collider2D))] public class EventTriggerEx : EventTrigger { /// /// 注册事件 /// /// 事件类型 /// 函数 public void Register(EventTriggerType triggerType, UnityAction action) { if (TryGetTriggerEvent(triggerType, out var triggerEvent)) { triggerEvent.AddListener(action); } else { Debug.LogWarning($"{triggerType.ToString()}未添加"); } } /// /// 卸载事件 /// /// 事件类型 /// 函数 public void UnRegister(EventTriggerType triggerType, UnityAction action) { if (TryGetTriggerEvent(triggerType, out var triggerEvent)) { triggerEvent.RemoveListener(action); } else { Debug.LogWarning($"{triggerType.ToString()}未添加"); } } /// /// 获取触发事件 /// /// 事件类型 /// 事件 /// 是否存在 private bool TryGetTriggerEvent(EventTriggerType triggerType, out TriggerEvent triggerEvent) { var entry = triggers.FirstOrDefault(item => item.eventID == triggerType); if (entry == null) { triggerEvent = null; return false; } else { triggerEvent = entry.callback; return true; } } public override void OnPointerEnter(PointerEventData data) { EventSystemEx.Instance.OnPointerEnter(gameObject); base.OnPointerEnter(data); } public override void OnPointerExit(PointerEventData data) { EventSystemEx.Instance.OnPointerExit(gameObject); base.OnPointerExit(data); } public override void OnPointerDown(PointerEventData eventData) { } } }