博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Unity中实现一个简单的消息管理器
阅读量:6535 次
发布时间:2019-06-24

本文共 1803 字,大约阅读时间需要 6 分钟。

一直偷懒没有开发这个东西,最近要做新手引导系统,必须大范围的解耦,所以不得不用消息系统来管理了。上网查了几篇文章,发现一点也不难,但是可能有的教程比较老,或者格式比较乱,所以我重新来写一个我自己的实现吧,抛砖引玉。

功能介绍

这个管理器,包含几个部分:

  1. 事件类型的枚举

  2. 事件列表

  3. 监听器的添加和删除

  4. 事件发送

原理简述

我假定读者尚不清楚事件管理器的概念。每当一个消息被触发的时候,在触发位置调用一下事件发送的函数。然后这个函数,会去事件列表中定位该事件,找出它对应的回调函数队列,逐个执行。如果没有回调函数,那么这个消息什么也不做。如果某个类需要监听某个事件,就将回调函数注册进去,如果不需要了,就从队列中删除。

关于delegate

这方面网上文章很多,就不详细介绍了,只说下基本思路。Delegate用来定义一种通用的函数类型,将函数作为参数传递,比如

public delegate void Func();
这里我定义了一个函数形式命名为Func,符合这个结构的,都可以当做这个delegate使用。需要传入函数作为参数的时候,这样用:

void Awake(){    Foo(Test);}public void Test(){    Debug.Log("hello");}public void Foo(Func bar){    bar();}

具体实现

public enum CustomEventType{    //事件列表}public delegate void EventCallback(object data = null);public class EventManager{    private static EventManager _instance;    public static EventManager instance{        get{            if(_instance == null){                _instance = new EventManager();            }            return _instance;        }    }    private static Dictionary
> eventQueue = new Dictionary
>(); public static void AddListener(CustomEventType type, EventCallback callback){ if(!eventQueue.ContainsKey(type)){ eventQueue.Add(type, new List
()); } if(!eventQueue[type].Contains(callback)){ eventQueue[type].Add(callback); } } public static void RemoveListener(CustomEventType type, EventCallback callback){ if(eventQueue.ContainsKey(type)){ eventQueue[type].Remove(callback); } } public static void PostEvent(CustomEventType type){ if(eventQueue != null && eventQueue.ContainsKey(type)){ List
callbacks = eventQueue[type]; for (int i = 0; i < callbacks.Count; i++) { callbacks[i](); } } }}

转载地址:http://bezdo.baihongyu.com/

你可能感兴趣的文章
获得文件和文件夹的所有权
查看>>
烂泥:学习mysql数据库主从同步复制原理
查看>>
Java相对路径读取文件
查看>>
PostgreSQL 商用版本EPAS(阿里云ppas) 自动(postgresql.conf)参数计算与适配功能
查看>>
烂泥:学习ssh之ssh隧道应用
查看>>
Android TableLayout 常用的属性介绍及演示
查看>>
Ajax跨域访问XML数据的另一种方式——使用YQL查询语句
查看>>
[原创]让您的服务器不再有被挂马的烦恼---文件安全卫士
查看>>
流水线和PC指针
查看>>
Fiddler设置抓取https请求
查看>>
div布局小技巧
查看>>
OCP 12c最新考试原题及答案(071-4)
查看>>
MHA故障切换和在线手工切换原理
查看>>
Python版本切换和Pip安装
查看>>
SilverLigth学习笔记--控制 Silverlight控件样式(转)
查看>>
poj3262
查看>>
第四十天笔记
查看>>
4、动态代理
查看>>
Loj #6073.「2017 山东一轮集训 Day5」距离
查看>>
我的TCP/IP学习笔记
查看>>