Unity3d UGUI 添加事件

話不多說直接上代碼,兩個方法的功能分別是添加事件和刪除事件。

    /// <summary>
    /// 添加UGUI的EventTrigger事件
    /// </summary>
    /// <param name="target">添加對象</param>
    /// <param name="type">事件類型</param>
    /// <param name="callback">調(diào)用函數(shù)</param>
    public static void AddUGUIEvent(GameObject target, EventTriggerType type, UnityAction<BaseEventData> callback)
    {
        EventTrigger trigger = target.GetComponent<EventTrigger>();
        if (trigger == null)
            trigger = target.AddComponent<EventTrigger>();

        //是否新增事件類型
        bool IsNew = false;
        if (trigger.triggers.Count == 0)
        {
            trigger.triggers = new List<EventTrigger.Entry>();
            IsNew = true;
        }
        else
        {
            for (int i = 0; i < trigger.triggers.Count; i++)
            {
                if (trigger.triggers[i].eventID == type)
                {
                    //如果已經(jīng)有該類型的事件類型,則新增事件至事件調(diào)用列表
                    trigger.triggers[i].callback.AddListener(callback);
                }
                else
                {
                    IsNew = true;
                }
            }
        }

        //添加一個新的事件類型的監(jiān)聽
        if (IsNew)
        {
            EventTrigger.Entry entry = new EventTrigger.Entry();
            entry.eventID = type;
            entry.callback = new EventTrigger.TriggerEvent();

            entry.callback.AddListener(callback);
            trigger.triggers.Add(entry);
        }
    }

    /// <summary>
    /// 刪除組件的UGUI EventTrigger事件
    /// </summary>
    /// <param name="target">添加對象</param>
    /// <param name="type">事件類型</param>
    /// <param name="callback">調(diào)用函數(shù)</param>
    public static void RemoveUGUIEvent(GameObject target, EventTriggerType type, UnityAction<BaseEventData> callback)
    {
        EventTrigger trigger = target.GetComponent<EventTrigger>();
        if (trigger == null)
        {
            Debug.LogError(string.Format("No EventTrigger on '{0}' !", target.name));
            return;
        }
        if (trigger.triggers == null || trigger.triggers.Count == 0)
        {
            Debug.LogError(string.Format("Object '{0}' triggers list is not correct !"));
        }
        List<EventTrigger.Entry> list = trigger.triggers;
        for (int i = list.Count - 1; i >= 0; i--)
        {
            if (list[i].eventID == type)
            {
                list[i].callback.RemoveListener(callback);
            }
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容