【unity2D】API-学习记录7-事件UnityAction
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【unity2D】API-学习记录7-事件UnityAction,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2243字,纯文字阅读大概需要4分钟。
内容图文
目标
学习UnityAction,以期简化代码。
前言
在委托Delegate里我们学习了多播委托(multicast delegate)。在C#Event中,用一个委托执行多个方法,就是多播委托。而在UnityEvent中,要实现多播委托,可以直接写,也可以使用UnityAction。
代码相关
在没用UnityAction时,我们要写多播委托,只能如下写一长串:
void OnEnable()
{
MyZombieEvent = GameObject.Find("EventTest").GetComponent<EventTest>();
MyZombieEvent.zombieEvent.AddListener(IntensifyDamage); //订阅事件
MyZombieEvent.zombieEvent.AddListener(IntensifyAttackIntermission);//订阅事件
MyZombieEvent.zombieEvent.AddListener(PeaAttack); //订阅事件
}
使用UnityAction后,可以写成这样:
void OnEnable()
{
MyZombieEvent = GameObject.Find("EventTest").GetComponent<EventTest>();
unityAction += IntensifyDamage;
unityAction += IntensifyAttackIntermission;
unityAction += PeaAttack;
}
非常简洁。
完整代码如下:
using UnityEngine;
using UnityEngine.Events;//引用命名空间
[System.Serializable]//序列化ZombieEvent,使其在Editor中显示,则可在Editor中选定订阅者
public class ZombieEvent : UnityEvent{}
//这一步对应C#Event中的“定义委托类型”
public class EventTest : MonoBehaviour
{
public ZombieEvent zombieEvent;
//这一步对应C#Event中的“基于委托类型,定义事件”
//这里的是实例事件,在上一篇中的是静态事件
void Start()
{
if(zombieEvent == null)
{
zombieEvent = new ZombieEvent();//实例化
}
zombieEvent.Invoke();//用Invoke发出通知
}
}
using UnityEngine;
using UnityEngine.Events;//引用命名空间
public class Pea : MonoBehaviour
{
public EventTest MyZombieEvent;
public UnityAction peaAction;
void OnEnable()
{
MyZombieEvent = GameObject.Find("EventTest").GetComponent<EventTest>();
peaAction += IntensifyDamage;
peaAction += IntensifyAttackIntermission;
peaAction += PeaAttack;
MyZombieEvent.zombieEvent.AddListener(peaAction);
}
void OnDisable()
{
MyZombieEvent.zombieEvent.RemoveListener(peaAction); //取消订阅
}
public void PeaAttack()
{
Debug.Log("Peas are attacking zombies.");
}
public void IntensifyDamage()
{
Debug.Log("The damage of pea double.");
}
public void IntensifyAttackIntermission ()
{
Debug.Log("The intermission of shot double.");
}
}
运行结果如图:
注意事项
根据上面的代码,我们可以看出一些端倪:
- 使用UnityAction时,该委托必须是零参数委托。详见Unity API UnityAction。
- 用UnityAction要引用命名空间:using UnityEngine.Events;
参考资料
内容总结
以上是互联网集市为您收集整理的【unity2D】API-学习记录7-事件UnityAction全部内容,希望文章能够帮你解决【unity2D】API-学习记录7-事件UnityAction所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。