unity中事件分发系统 EventDispatcher

本文介绍了Unity中如何使用delegate和hashtable实现事件分发系统EventDispatcher,避免使用C#的event关键字。通过实例展示了如何在游戏对象上挂载脚本来进行事件监听和触发。
摘要由CSDN通过智能技术生成

出处:http://blog.csdn.net/u010019717

author:孙广东      时间:2015.3.21     23:00

不使用C#中的event关键字: 只是使用delegate和hashtable 进行事件的分发。

           基本库如下:

namespace EventDispatcher
{
	/// <summary>
	/// IEvent接口
	/// </summary>
	public interface IEvent
	{
		/// <summary>
		/// Gets or sets the type.
		/// </summary>
		/// <value>
		/// type类型.
		/// </value>
		string type { get; set;}     
		
		/// <summary>
		/// Gets or sets the target.
		/// </summary>
		/// <value>
		/// target目标.
		/// </value>
		object target { get; set; }
	}
}
namespace EventDispatcher
{
	/// <summary>
	/// 事件事件接口
	/// </summary>
	public class Event : IEvent
	{
		// GETTER / SETTER
		/// <summary>
		/// The _type_string.
		/// </summary>
		private string _type_string;
		string IEvent.type { 
			get
			{
				return _type_string;
			}
			set
			{
				_type_string = value;
				
			}
		}
		
		/// <summary>
		/// The _target_object.
		/// </summary>
		private object _target_object;
		object IEvent.target { 
			get
			{
				return _target_object;
			}
			set
			{
				_target_object = value;
				
			}
		}

		///<summary>
		///	 Constructor
		///</summary>
		public Event (string aType_str )
		{
			//
			_type_string = aType_str;
		}

	    /// <summary>
	    /// Deconstructor
	    /// </summary>
	    //~Event ( )
	    //{
	    //	Debug.Log ("Event.deconstructor()");
	    //}
	}
}
namespace EventDispatcher
{
	/// <summary>
	/// IEventDispatcher 事件分发接口,添加移除分发
	/// </summary>
	public interface IEventDispatcher
	{
		/// <summary>
		/// 添加事件监听
		/// </summary>
		/// <returns><c>true</c>, 如果事件成功被监听, <c>false</c> 失败 </returns>
		/// <param name="aEventType_string">A event type_string.</param>
		/// <param name="aEventDelegate">一个事件委托</param>
	    bool addEventListener(string aEventType_string, EventDelegate aEventDelegate);

		/// <summary>
        /// 添加事件监听
		/// </summary>
        /// <returns><c>true</c>, 如果事件成功被监听, <c>false</c> 失败 </returns>
		/// <param name="aEventType_string">A event type_string.</param>
        /// <param name="aEventDelegate">一个事件委托</param>
		/// <param name="eventDispatcherAddMode">Event dispatcher add mode.</param>
		bool addEventListener(string aEventType_string, EventDelegate aEventDelegate, EventDispatcherAddMode eventDispatcherAddMode);


		/// <summary>
		/// 是否有这个事件监听
		/// </summary>
		/// <returns><c>true</c>, 这个监听已经有了, <c>false</c> 没有.</returns>
		/// <param name="aEventType_string">A event type_string.</param>
        /// <param name="aEventDelegate">一个事件委托</param>
	    bool hasEventListener(string aEventType_string, EventDelegate aEventDelegate);

		/// <summary>
		/// 移除事件监听
		/// </summary>
		/// <returns><c>true</c>, 被成功移除 <c>false</c> 失败</returns>
		/// <param name="aEventType_string">A event type_string.</param>
        /// <param name="aEventDelegate">一个事件委托</param>
	    bool removeEventListener(string aEventType_string, EventDelegate aEventDelegate);

		/// <summary>
        /// 移除所有事件监听
		/// </summary>
		/// <returns><c>true</c>, 成功, <c>false</c> 失败 </returns>
	    bool removeAllEventListeners();

		/// <summary>
		/// 分发广播事件
		/// </summary>
		/// <returns><c>true</c>, 成功, <c>false</c> 失败</returns>
		/// <param name="aIEvent">A I event.</param>
	    bool dispatchEvent(IEvent aIEvent);
	}
}
// C# unity事件管理器 在哈希表中
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity框架事件系统是一种消息传递机制,用于在各个组件之间发送和接收消息。它基于发布/订阅模式,其一个组件发布事件,而其他组件通过订阅该事件来接收消息并做出相应的响应。 在Unity事件系统包括两种类型的事件Unity事件和C#事件Unity事件是在Unity编辑器定义的事件,可以在脚本访问。C#事件是由C#编写的自定义事件。 使用Unity事件系统的步骤包括: 1. 定义事件:创建一个事件类来定义事件的名称和参数。 2. 注册事件:在需要接收该事件的组件注册该事件。 3. 发布事件:当某个条件满足时,发布该事件。 4. 响应事件:在接收到事件时,执行相应的操作。 以下是一个示例代码,展示如何在Unity使用事件系统: ``` //定义事件类 public class MyEvent : UnityEvent<int, string> {} //注册事件 public MyEvent myEvent = new MyEvent(); void Start() { myEvent.AddListener(MyEventHandler); } //发布事件 if (condition) { myEvent.Invoke(1, "message"); } //响应事件 void MyEventHandler(int value, string message) { Debug.Log(message + " " + value); } ``` 在这个示例,我们定义了一个名为MyEvent事件类,该事件有两个参数:int和string类型。然后,我们在Start方法注册了该事件,并在某个条件得到满足时发布了该事件。最后,我们在MyEventHandler方法响应了该事件,输出了传递的参数。 总的来说,Unity框架事件系统是一种非常有用的消息传递机制,可以帮助开发者优化代码结构,提高代码的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值