【unity2D】API-学习记录6-事件UnityEvent
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【unity2D】API-学习记录6-事件UnityEvent,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2538字,纯文字阅读大概需要4分钟。
内容图文
目标
开发中遇到了点问题,用事件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辨析
内容总结
以上是互联网集市为您收集整理的【unity2D】API-学习记录6-事件UnityEvent全部内容,希望文章能够帮你解决【unity2D】API-学习记录6-事件UnityEvent所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。