Unity实现自己的事件机制(简单实现)
来源:互联网 发布:php api接口开发规范 编辑:程序博客网 时间:2024/06/10 19:16
事件机制广泛应用于mvc模式中,灵活的事件机制能够弥补Unity中的一些缺陷,比如协程的执行。因为协程不能返回值,也不能通过out或者ref传递。通过事件机制,可以知道协程执行进度并且返回执行结果。当然,这只是个举例,也只是我习惯用的一种方式。如果有更好的实现方式,希望不吝赐教。
所有要接受事件的脚本,都要继承这个事件手柄的接口
/// <summary>/// 事件手柄/// </summary>public interface IEventHandler { void OnEvent(string type,object data);}
以下是EventManager的主要内容,实现了注册监听,移除监听,派发事件等基本方法。只要在事件派发前,注册好就可以运行了!
using UnityEngine;using System.Collections.Generic;public class EventManager { private static EventManager instance; private Dictionary<string, List<IEventHandler>> dicHandler; private EventManager() { dicHandler = new Dictionary<string, List<IEventHandler>>(); } public static EventManager GetInstance() { if (instance == null) { instance = new EventManager(); } return instance; } /// <summary> /// 注册事件监听 /// </summary> /// <param name="type">监听类型</param> /// <param name="listher">监听对象</param> public void AddEventListener(string type, IEventHandler listher) { if (!dicHandler.ContainsKey(type)) { dicHandler.Add(type,new List<IEventHandler>()); } dicHandler[type].Add(listher); } /// <summary> /// 移除对type的所有监听 /// </summary> /// <param name="type"></param> public void RemoveEventListener(string type) { if (dicHandler.ContainsKey(type)) { dicHandler.Remove(type); } } /// <summary> /// 移除监听者的所有监听 /// </summary> /// <param name="listener">监听者</param> public void RemoveEventListener(IEventHandler listener) { foreach (var item in dicHandler) { if (item.Value.Contains(listener)) { item.Value.Remove(listener); } } } /// <summary> /// 清空所有监听事件 /// </summary> public void ClearEventListener() { Debug.Log("清空对所有所有所有事件的监听"); if (dicHandler!=null) { dicHandler.Clear(); } } /// <summary> /// 派发事件 /// </summary> /// <param name="type">事件类型</param> /// <param name="data">事件传达的数据</param> public void DispachEvent(string type, object data) { if (!dicHandler.ContainsKey(type)) { Debug.Log("Did not add any IEventHandler of " + type + " in EventManager!"); return; } List<IEventHandler> list = dicHandler[type]; for (int i = 0; i < list.Count; i++) { list[i].OnEvent(type,data); } }}
1 0
- Unity实现自己的事件机制(简单实现)
- 简单的事件通知机制实现
- $.ready()事件的实现机制
- Java事件模型学习(2)--实现自己的事件
- 创建图形用户界面GUI和事件监听机制的简单实现(java)
- unity实现自己的一个消息系统
- unity消息机制实现
- java实现简单的窗体和密码验证(传参,事件机制和事件监听的作用过程)
- 【Java系列】(五)java实现简单的窗体和密码验证(传参,事件机制和事件监听)
- Unity Minecraft 我的世界 核心渲染机制的简单实现 一个面的渲染
- 自己实现简单的RPC
- 自己实现简单的Stack
- Unity Mecanim动画的实现(六):动画事件,实现动画过程中的事件处理
- Unity Mecanim动画的实现(六):动画事件,实现动画过程中的事件处理
- 双击事件的简单实现
- 自己实现事件监听
- Unity 倒计时简单实现
- 50、JavaScript里面,自定义事件的简单实现(事件队列的简单实现)
- 随便记录
- 第25个python程序
- Winform分页控件使用详细介绍
- 迷途知返,脚踏实地——目标导航
- iOS开发 iOS10推送必看(基础篇)
- Unity实现自己的事件机制(简单实现)
- syntax error : missing ';' before 'using'
- HTML5学习_day05(3)--html之float定义
- Leetcode 合并有序数组 Merge 2 arrays in 1 array
- 常用js框架之vue.js入门
- jsp页面通过js将时间格式化并赋初始值
- Java堆内存Heap与非堆内存Non-Heap简介和设置
- Java 8系列之重新认识HashMap
- Linux系统管理