说明:
UGUI一般对Button等添加点击事件等时,往往会涉及到使用将脚本与Button相挂接的方式,今天介绍几种不需要挂接的方式,直接由代码与之产生相对应的效果。。。
方法一:
使用GetComponent<Button>().onClick.AddListener方法添加事件监听器:
public GameObject btnTest1;
void Start()
{
btnTest1.GetComponent<Button>().onClick.AddListener(delegate ()
{
Debug.Log("Click1111");
});
}
常见类型:
GetComponent<Button>().onClick.AddListener(delegate () {
OnClickEvent(itemImg[i]._Obj);
});
}
}
void OnClickEvent(GameObject Obj)
{
}
方法二:
和方法一是同一种方法(对不太懂事件委托的大兄弟们随便了解一下),只是将所监听的事件由外部函数传递而来:
public GameObject btnTest2;
public GameObject btnTest3;
void Start()
{
btnTest2.GetComponent<Button>().onClick.AddListener(btnClick2);
}
void btnClick2()
{
Debug.Log("Click2222");
}
方法三:
自定义了一个类继承EventTrigger,并重写其中的部分所需要的方法(目的延伸UGUI中各种事件):
UGUI所提供的EventTrigger如下所示:
重写的好处在于,可以实现UGUI提供的Onclick事件之外的事件如:OnPointDown(按下事件)、OnPointExit(抬起事件)等一系列,可根据自己需求获取。
如下面所示:
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger
{
public delegate void VoidDelegate();
public VoidDelegate onClick;
static public EventTriggerListener Get(Transform transform)
{
EventTriggerListener listener = transform.GetComponent<EventTriggerListener>();
if (listener == null)
listener = transform.gameObject.AddComponent<EventTriggerListener>();
return listener;
}
public override void OnPointerClick(PointerEventData eventData)
{
if (onClick != null)
onClick();
}
}
public GameObject btnTest3;
void Start()
{
EventTriggerListener.Get(btnTest3.transform).onClick += btnClick3;
}
void btnClick3()
{
Debug.Log("Click3333");
}