Unity通過腳本代碼添加EventTrigger事件和監聽、UI控件的事件持久監聽

Unity通過腳本代碼添加EventTrigger事件和監聽、UI控件的事件持久監聽

通過腳本代碼添加 EventTrigger 事件和監聽的主要流程是:

  1. 獲取 EventTrigger.Entry 對象作爲觸發器的載體
  2. 設置載體的類型(eventID)和監聽方法(callback
  3. 將載體添加到 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章