Unity通過腳本代碼添加EventTrigger事件和監聽、UI控件的事件持久監聽
通過腳本代碼添加 EventTrigger
事件和監聽的主要流程是:
- 獲取
EventTrigger.Entry
對象作爲觸發器的載體 - 設置載體的類型(
eventID
)和監聽方法(callback
) - 將載體添加到
EventTrigger
對象的觸發器列表(triggers
)中
具體的代碼如下:
/// <summary>
/// 爲EventTrigger添加事件及事件監聽。
/// </summary>
/// <param name="obj">帶有或需要添加EventTrigger的對象</param>
/// <param name="eventType">要添加的事件的類型</param>
/// <param name="callback">事件的觸發回調</param>
private void AddEventTriggerEvent(Component obj, EventTriggerType eventType, UnityAction<BaseEventData> callback)
{
EventTrigger.Entry entry = null;
EventTrigger trigger = obj.GetComponent<EventTrigger>();
if (trigger != null) // 已有EventTrigger
{
// 查找是否已經存在要註冊的事件
foreach (EventTrigger.Entry existingEntry in trigger.triggers)
{
if (existingEntry.eventID == eventType)
{
entry = existingEntry;
break;
}
}
}
else // 添加新的EventTrigger
{
trigger = obj.gameObject.AddComponent<EventTrigger>();
}
// 如果這個事件不存在,就創建新的實例
if (entry == null)
{
entry = new EventTrigger.Entry();
entry.eventID = eventType;
// todo 如果已經存在這個事件,它的callback是否還需要new?
entry.callback = new EventTrigger.TriggerEvent();
}
// 添加觸發回調並註冊事件
entry.callback.AddListener(callback);
trigger.triggers.Add(entry);
}
補充:通過腳本代碼添加UI控件的事件持久監聽(僅用於編輯器內)
https://docs.unity3d.com/ScriptReference/Events.UnityEventTools.html