該腳本只適用于UGUI
? ? ? ?在Unity中添加監(jiān)聽的方法一般是不含參的舀凛。但若是需要傳參則AddListener(delegate()=>Func(string str)) 即可。但是今天在Unity中用UGUI的一個Button按鈕綁定一個監(jiān)聽的同時要把Button按鈕本身當作參數傳入方法中對按鈕的子物體進行操作猛遍。但結果是能獲取到Button本身,但是獲取不到其身上的組件和子物體的組件梯醒。查找其身上的組件時會報錯找不到該對象腌紧。所以使用一個工具類EventTriggerListener完美解決了這個問題。
? ? ? ?使用方法為:
EventTriggerListener.Get(需要綁定監(jiān)聽的Button的gameObject
).onClick = OnCallBack;
其監(jiān)聽要執(zhí)行的方法即為:
private void OnCallBack(GameObject go)
{}
—————————————————————————————————
腳本代碼如下:
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger
{
? ? public delegate void VoidDelegate(GameObject go);
? ? public VoidDelegate onClick;
? ? public VoidDelegate onDown;
? ? public VoidDelegate onEnter;
? ? public VoidDelegate onExit;
? ? public VoidDelegate onUp;
? ? public VoidDelegate onSelect;
? ? public VoidDelegate onUpdateSelect;
? ? public static EventTriggerListener Get(GameObject go)
? ? {
? ? ? ? EventTriggerListener listener = go.GetComponent<EventTriggerListener>();
? ? ? ? if (listener == null) listener = go.AddComponent<EventTriggerListener>();
? ? ? ? return listener;
? ? }
? ? public override void OnPointerClick(PointerEventData eventData)
? ? {
? ? ? ? if (onClick != null) onClick(gameObject);
? ? }
? ? public override void OnPointerDown(PointerEventData eventData)
? ? {
? ? ? ? if (onDown != null) onDown(gameObject);
? ? }
? ? public override void OnPointerEnter(PointerEventData eventData)
? ? {
? ? ? ? if (onEnter != null) onEnter(gameObject);
? ? }
? ? public override void OnPointerExit(PointerEventData eventData)
? ? {
? ? ? ? if (onExit != null) onExit(gameObject);
? ? }
? ? public override void OnPointerUp(PointerEventData eventData)
? ? {
? ? ? ? if (onUp != null) onUp(gameObject);
? ? }
? ? public override void OnSelect(BaseEventData eventData)
? ? {
? ? ? ? if (onSelect != null) onSelect(gameObject);
? ? }
? ? public override void OnUpdateSelected(BaseEventData eventData)
? ? {
? ? ? ? if (onUpdateSelect != null) onUpdateSelect(gameObject);
? ? }
}