【unity2D】API-学习记录5-静态事件(C#)Event
作者:互联网
目标
因为UnityEvent是由C# Event改良而来的,所以先来学(C#)Event的基本概念和用法。
前言
Event(事件)是在multicast delegate的基础上演变来的,所以我们先得知道delegate是什么。
是什么
参考博文C# Event/UnityEvent辨析第二个小标题下的解释,非常形象。
简单来讲,就是发布者(Publisher)。Event在特定时间发出一条信息,通知所有订阅者,使它们相应地执行各自动作。
用法步骤
事件Event分为静态事件和实例事件,这里我们先学静态事件的用法步骤。
- 首先在发布者(Publisher)中定义委托类型。再基于此委托类型,定义静态事件。
- 在订阅者中定义委托函数。
- 使订阅者订阅发布者。
- 发出者发出通知,所有已订阅者执行相关方法。
- 若事件为静态事件,记得取消订阅。
代码相关
using UnityEngine;
public class EventTest : MonoBehaviour
{
public delegate void ZombieEvent(string zombieAction);//定义委托类型ZombieEvent
public static event ZombieEvent zombieEvent;//基于委托类型,使用关键字static和event定义静态事件
void Start()
{
zombieEvent("Zombies get into your yard.");//发出通知“僵尸进入了你的后院”
}
}
using UnityEngine;
public class Pea : MonoBehaviour
{
void OnEnable()
{
//语法上,像对待静态类一样,对待静态事件
EventTest.zombieEvent += PeaAttack;//订阅静态事件
}
void OnDisable()
{
EventTest.zombieEvent -= PeaAttack; //被摧毁时,取消订阅,有始有终,避免内存泄露
}
public void PeaAttack(string zombieAction)//接收静态事件发出的通知
{
Debug.Log(zombieAction + "Peas are attacking zombie.");//豌豆攻击僵尸
}
}
using UnityEngine;
public class Cabbage : MonoBehaviour
{
void OnEnable()
{
EventTest.zombieEvent += CabbageAttack;//订阅静态事件
}
void OnDisable()
{
EventTest.zombieEvent -= CabbageAttack; //被摧毁时,取消订阅,有始有终,避免内存泄露
}
public void CabbageAttack(string zombieAction)//定义委托函数
{
Debug.Log("Cabbages are also attacking zombie.");//卷心菜也攻击僵尸
}
}
运行结果如下:
总结
不总结了。每一个小标题下其实都是总结好了的,直接去看对应小标题就好了。如果学的东西比较杂乱,才进行总结。
注意事项
- 静态事件一定要记得取消订阅,否则会造成内存泄露。
- 从面向对象的角度,如果一个对象只关心何时调用方法时,使用静态事件。
参考资料
C# Event/UnityEvent辨析
静态事件static event
标签:订阅,unity2D,C#,void,public,静态,API,事件,Event 来源: https://www.cnblogs.com/OtusScops/p/14724377.html