Unity3D委托的使用
原文链接:https://blog.csdn.net/u012322710/article/details/52911937
1.先写一个委托类,所有的委托都写在这个类里
public class MyDelegate {
public delegate void LogDelegate(string log); //定义 委托名为LogDelegate,带一个string参数的 委托类型
public static LogDelegate LogEvent; //声明委托对象,委托实例为LogEvent
public static void OnLogEvent(string log) //可以直接 MyDelegate.LogEvent("")调用委托,这么写方便管理,还可以扩展这个方法;
{
if (LogEvent != null)
{
LogEvent(log);
}
}
}
2.添加委托调用事件,调用委托
public class MyInvoke : MonoBehaviour {
void Start()
{
MyDelegate.LogEvent += MyLog;
MyDelegate.LogEvent += MyLog2;
MyDelegate.OnLogEvent("给你们这些小函数发回调消息了啊!");
}
void MyLog(string log)
{
Debug.Log("这种委托方法真是好用的不得了!我收到你的消息了:" + log);
}
void MyLog2(string log)
{
Debug.Log("可以实现消息触发回调,好方便!我也收到了:" + log);
}
}
有单个对象调用时很好用,如果场景中有多个MyInvoke类的对象,调用时会重复:
可以添加返回bool的方法判断
bool MethodIsRegistered(string methodName)
{
if (MyDelegate.LogEvent == null)
return false;
for (int ctr = MyDelegate.LogEvent.GetInvocationList().Length - 1; ctr >= 0; ctr--)
{
var outputMsg = MyDelegate.LogEvent.GetInvocationList()[ctr];
//outputMsg.DynamicInvoke("Greetings and salutations!");
if (outputMsg.Method.Name == methodName)
{
return true;
}
}
return false;
}
*针对上述出现重复问题,回调的时候会出现,如果不用回调则不会出现重复。