ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【unity2D】API-学习记录6-事件UnityEvent

2021-05-01 19:02:47  阅读:282  来源: 互联网

标签:zombieEvent unity2D C# MyZombieEvent Event API UnityEvent public


目标

开发中遇到了点问题,用事件UnityEvent比较好解决,现在来学习UnityEvent的基本使用方法,以期解决问题。

前言

  1. UnityEvent的发展史大概是这样的:

 委托Delegate --> 事件(C#)Event --> 事件UnityEvent

  1. UnityEvent和C#Event在语法上有较大区别。

  2. 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.");
	}
}

订阅事件的两种方法

  1. 用[System.Serializable]来序列化事件,使其在Editor中显示,则可在Editor中手动编辑订阅。

  2. 代码控制订阅。正如上面代码中所写:先获取到类的实例,再访问类中的事件。用AddListener方法进行订阅,RemoveListener方法取消订阅。

运行结果如下:
image

参考资料

【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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有