【unity2D】API-学习记录6-事件UnityEvent
作者:互联网
目标
开发中遇到了点问题,用事件UnityEvent比较好解决,现在来学习UnityEvent的基本使用方法,以期解决问题。
前言
- UnityEvent的发展史大概是这样的:
委托Delegate --> 事件(C#)Event --> 事件UnityEvent
-
UnityEvent和C#Event在语法上有较大区别。
-
UnityEvent在语法上完全脱离了Delegate,所以,即使不学Delegate,也能学UnityEvent。不过,要是学了Delegate和C#Event的话,理解UnityEvent会比较容易,建议都学。
是什么
参考博文C# Event/UnityEvent辨析第二个小标题下的解释,非常形象。
简单来讲,就是发布者(Publisher)。Event在特定时间发出一条信息,通知所有订阅者,使它们相应地执行各自动作。
使用步骤
代码相关
using UnityEngine;
using UnityEngine.Events;//引用命名空间
[System.Serializable]//序列化ZombieEvent,使其在Editor中显示,则可在Editor中选定订阅者
public class ZombieEvent : UnityEvent<string,int>{}
//这一步对应C#Event中的“定义委托类型”
public class EventTest : MonoBehaviour
{
public ZombieEvent zombieEvent;
//这一步对应C#Event中的“基于委托类型,定义事件”
//这里的是实例事件,在上一篇中的是静态事件
void Start()
{
if(zombieEvent == null)
{
zombieEvent = new ZombieEvent();//实例化
}
zombieEvent.Invoke("Zombies get into your yard.",6);//用Invoke发出通知
}
}
using UnityEngine;
public class Pea : MonoBehaviour
{
public EventTest MyZombieEvent;
void OnEnable()
{
MyZombieEvent = GameObject.Find("EventTest").GetComponent<EventTest>();
MyZombieEvent.zombieEvent.AddListener(PeaAttack); //订阅事件
}
void OnDisable()
{
MyZombieEvent.zombieEvent.RemoveListener(PeaAttack); //取消订阅
}
public void PeaAttack(string zombieAction,int zombieCount)//这一步对应C#Event中的“定义委托函数”
{
Debug.Log(zombieAction + "There are " + zombieCount + " zombies. Peas are attacking zombies.");
}
}
using UnityEngine;
public class Cabbage : MonoBehaviour
{
public EventTest MyZombieEvent;
void OnEnable()
{
MyZombieEvent = GameObject.Find("EventTest").GetComponent<EventTest>();
MyZombieEvent.zombieEvent.AddListener(CabbageAttack); //订阅事件
}
void OnDisable()
{
MyZombieEvent.zombieEvent.RemoveListener(CabbageAttack); //取消订阅
}
public void CabbageAttack(string zombieAction,int zombieCount)//这一步对应C#Event中的“定义委托函数”
{
Debug.Log(zombieAction + "There are " + zombieCount + " zombies. Cabbages are attacking zombies.");
}
}
订阅事件的两种方法
-
用[System.Serializable]来序列化事件,使其在Editor中显示,则可在Editor中手动编辑订阅。
-
代码控制订阅。正如上面代码中所写:先获取到类的实例,再访问类中的事件。用AddListener方法进行订阅,RemoveListener方法取消订阅。
运行结果如下:
参考资料
【Unity3D API的学习与使用】Unity中的事件响应——UnityEvent
做游戏 - Unity技术与技巧 - 事件(Event)
C# Event/UnityEvent辨析
标签:zombieEvent,unity2D,C#,MyZombieEvent,Event,API,UnityEvent,public 来源: https://www.cnblogs.com/OtusScops/p/14719928.html