UnityAction委托
UnityAction本质上就是C#中的Action所以我们完全可以把他按照C#的来写学习会更加的简单,如果你还不知道C#中的Action怎么写那我劝你还是先把C#学好我们来看看这几段C#代码
第一种Action委托
using System;
using UnityEngine;
public class TeachEvnet : MonoBehaviour
{
//定义一个委托
private Action _action;
private void Start()
{
//注册事件方法
_action += ActionTest;
//调用事件
_action.Invoke();
//调用事件也可以这么写
_action();
}
private void ActionTest()//Action事件方法
{
Debug.Log("Hello Wrold");
}
}
第二种Func委托
using System;
using UnityEngine;
public class TeachEvnet : MonoBehaviour
{
//定义一个事件
private Func<string, int> _func;
private void Start()
{
//注册事件方法
_func += FuncTest;
//调用事件
_func.Invoke("李四");
//方法二
_func("李四");
}
private int FuncTest(string name)//Func事件方法
{
return 0;
}
}
第三种delegate委托
using UnityEngine;
public class TeachEvnet : MonoBehaviour
{
//定义一个委托
private delegate void EventTest();
//定义一个事件
private event EventTest _event;
private void Start()
{
//注册事件方法
_event += DelegateTest;
//调用事件
_event.Invoke();
}
private void DelegateTest()//事件方法
{
Debug.Log("Hello Wrold");
}
}
我们看完C#的委托之后现在让我们学习Unity中的新委托 它是UnityAction 和 UnityEvent
要学习他们首先必须引用using UnityEngine.Events在我们的脚本顶端
接下来是代码部分
using UnityEngine;
using UnityEngine.Events;
public class TeachEvnet:MonoBehaviour
{
//添加一个委托
public UnityAction action;
//添加一个事件
public UnityEvent myEvent;
void Start()
{
//委托中注册一个方法
action += MyFunction;
//事件监听委托
myEvent.AddListener(action);
//调用事件
myEvent.Invoke();
}
public void MyFunction()//方法
{
Debug.Log("Hello: 张三");
}
}
然后我退出代码部分到编辑器部分我可以看到出现了事件监听面板如图1-1
事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些出现,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。事件是用于进程间通信。
通过事件使用委托
事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。
发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。
订阅器(subscriber) 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。
如果这篇文章对你有帮助希望你给我个赞