事件委托和事件监听组件
1、委托就是我们的EventDelegate,这个事件委托是NGUI统一的底层的传递消息,监听事件的机制,这个比老版本的NGUI中的sendmessage的效率高了100倍据说!其实本质上,这个EventDelegate和C#代码中的Delegate没有任何的区别,它将会负责NGUI中所有的事件监听回调等,最常用的就是我们点击按钮触发一个事件,那么Button组件中就会有Button的回调。我们可以将EventDelegate理解为一个特殊的变量,它可以赋值任何一个带有notify参数的组件中。我们可以在Unity当中来看一看,我们做一个按钮来看看吧。
2、事件委托怎么用呢?其实我们可以将一个函数整体当做一个变量,来赋值给各个组件的回调模块,也就是我们之前讲的那个notify模块,NGUI的notiy模块其实是一个事件回调的List,它能够支持多个回调事件,例如我们按钮点击下去可以执行很多个函数事件,不过之前我们都是把挂载了方法的组件拖动上去,然后选择方法,其实用代码来执行的话,就是相当于是动态挂载的了,会更加的便于维护和修改,不然以后一个按钮上函数挂多了,删掉了怎么办?代码的话都是动态的。
3、委托事件代码的写法和案列
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyButtonClick : MonoBehaviour {
public UIButton myButton;
// Use this for initialization
void Start () {
EventDelegate myED = new EventDelegate (this, "myButtonClick");
//以下两种方法选一种即可
//EventDelegate.Add (myButton.onClick, myED);
myButton.onClick.Add (myED);
}
// Update is called once per frame
void Update () {
}
public void myButtonClick() {
Debug.Log ("按钮按下!");
}
}
4、什么地方可以用到事件委托呢? NGUI中的话,其实只要是组件中带有notify回调模块的组件,都可以使用事件委托,比如之前有讲过的部分组件上的OnFinsh,OnClick,OnValueChange等等,这些组件的时间回调全部都是EventDelegate类型的,使用方法基本都和刚才讲的按钮的方法类似的。
5、EventTrigger组件是NGUI提供的一种监听各种事件的组件,我们可以直接在AddComponent中来添加,它可以监听单击,按下,选中,拖拽等等各种事件。非常的全面,基本我们需要的都在这个地方了,其实它的本质的话就是一个事件监听的集合,每个事件都有一个notify回调事件组,我们可以理解为我们之前的UIButton的单击事件复制一样来赋值,我们还是可以拖动一个绑定了公共函数的物体到Notity上面,然后选择一个我们想要在该事件触发时执行的函数,这样就OK了,非常的方便的。