编程语言
首页 > 编程语言> > 【unity2D】API-学习记录5-静态事件(C#)Event

【unity2D】API-学习记录5-静态事件(C#)Event

作者:互联网

目标

因为UnityEvent是由C# Event改良而来的,所以先来学(C#)Event的基本概念和用法

前言

Event(事件)是在multicast delegate的基础上演变来的,所以我们先得知道delegate是什么

是什么

参考博文C# Event/UnityEvent辨析第二个小标题下的解释,非常形象。

简单来讲,就是发布者(Publisher)。Event在特定时间发出一条信息,通知所有订阅者,使它们相应地执行各自动作。

用法步骤

事件Event分为静态事件和实例事件,这里我们先学静态事件的用法步骤。

  1. 首先在发布者(Publisher)中定义委托类型。再基于此委托类型,定义静态事件。
  2. 在订阅者中定义委托函数。
  3. 使订阅者订阅发布者。
  4. 发出者发出通知,所有已订阅者执行相关方法。
  5. 若事件为静态事件,记得取消订阅。

代码相关

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.");//卷心菜也攻击僵尸
	}
}

运行结果如下:
image

总结

不总结了。每一个小标题下其实都是总结好了的,直接去看对应小标题就好了。如果学的东西比较杂乱,才进行总结。

注意事项

  1. 静态事件一定要记得取消订阅,否则会造成内存泄露。
  2. 从面向对象的角度,如果一个对象只关心何时调用方法时,使用静态事件。

参考资料

C# Event/UnityEvent辨析
静态事件static event

标签:订阅,unity2D,C#,void,public,静态,API,事件,Event
来源: https://www.cnblogs.com/OtusScops/p/14724377.html