在Unity3D中使用委托
函数回调机制——委托
using UnityEngine;
using System.Collections;
public class DelegateScripts:MonoBehaviour
{
//声明一个委托类型,它的实例引用一个方法
internal delegate void MyDelegate(int num);
MyDelegate myDelegate;
void Start()
{
//委托类型 MyDelegate的实例myDelegate引用的方法是
//PrintNum
myDelegate=PrintNum;
myDelegate(50);
//委托类型 MyDelegate的实例myDelegate引用的方法是
//DoubleNum
myDelegate=DoubleNum;
myDelegate(50);
}
void PrintNum(int num)
{
Debug.Log("Print Num: "+num);
}
void DoubleNum(int num)
{
Debug.Log("Double Num:"+num*2);
}
}
在最开始没可以看到internal委托类型MyDelegate的声明。委托要确定一个回调方法签名,包括参数以及返回类型等。在本例中MyDelegate的回调方法的参数类型是int,返回类型为void。在“myDelegate=PrintNum;”这句话中使用了C#2为委托提供的方法组转换。
在使用方法组转换时,隐式转换将一个方法组转换为具有兼容签名的任意委托类型。
代码演示如下:
Action<string> tellMeYourName = delegate (string name)
{
string intro = "My name is";
Debug.Log(intro+name);
};
这段代码就使用了“匿名方法”这一机制。所谓的匿名就是指该方法并没有自己的名字,而是在一开始就把{}内的方法赋给了委托实例tellMeYourName。之后,我们可以直接调用tellMeYourName。