委托有四种类型:delegate、Action、Func、predicate
1、delegate :0~32个参数,返回值可有可无
2、Action : 0~16个参数,无返回值的泛型委托
-->Action<int,string,bool> :表示有三种类型的参数的无返回值的委托
3、Func : 0~16个参数,必须有返回值的泛型委托
-->Func<int> :表示无参,返回值类型为int的委托 ; Func<object,int> :表示参数类型为object,返回值类型为int的委托
4、predicate :只有一个参数,返回值类型为bool类型的泛型委托
-->predicate<int> :表示参数类型为int,返回值类型为bool的委托
委托的使用:
以player的血条为例 :首先声明并创建一个委托(返回值,参数列表),然后在被动的需要改变信息的类(UI) 中注册一个委托(监听),最后在player类(因为它的信息的改变而导致UI的改变)中调用委托
//事件分发器
public class EventDispather {
//声明了一个无参的返回值类型为void的委托
public delegate void VoidDelegate();
//创建了一个委托(方法名) 被监听者调用方法(传参)
public static VoidDelegate voidDelegate;
}
public class Monitor : MonoBehaviour {
void Start () {
EventDispather.voidDelegate += TestDelegate;
}
void Update()
{
EventDispather.voidDelegate();
}
//与创建的委托相同参数列表和返回值的方法
void TestDelegate()
{
Debug.Log("VoidDelegate");
}
}
事件的使用注意:
1、事件不能用 "=" 进行赋值,只能用 "+="
2、事件只能在本类中调用方法,赋值(+=)可以在别类