這個可以自定義UI元素的點擊,拖拽等事件。
核心方法:在代碼里面定義一個委托,腳本繼承EventTrigger搞就完了,直接代碼:
using UnityEngine; using UnityEngine.EventSystems; public class EventTriggerListener : EventTrigger { public delegate void MouseAction(GameObject go); public MouseAction onEnter; public MouseAction onExit; public MouseAction onClick; public static EventTriggerListener Get(GameObject go) { EventTriggerListener eventTriggerListener = go.GetComponent<EventTriggerListener>(); if (eventTriggerListener == null) { eventTriggerListener = go.AddComponent<EventTriggerListener>(); } return eventTriggerListener; } public override void OnPointerClick(PointerEventData eventData) { base.OnPointerClick(eventData); onClick?.Invoke(gameObject); } public override void OnPointerEnter(PointerEventData eventData) { base.OnPointerEnter(eventData); onEnter?.Invoke(gameObject); } public override void OnPointerExit(PointerEventData eventData) { base.OnPointerExit(eventData); onExit?.Invoke(gameObject); } }
PS:上面代碼在CS 4以下運行會報錯,委托執行方式改為:
if(onClick!=null){
onClick(gameObject);
}
調用的時候獲取到物體的GameObject,直接用:
EventTriggerListener.Get(gameObject).onClick += (go)=>{ Debug.Log(go.name); };
可以自由擴展,需要什么事件就在下面重寫事件就好啦。
就這樣。拜拜~