Unity游戏UI框架(七):消息传递中心
2017-06-19 21:58
627 查看
Unity游戏项目中存在多种数值(消息)的传递方式,但是大多数的消息传递方式,耦合性太高造成项目模块的“复用性”降低,采用“消息中心”的思想,开发类似“发邮件”、“收邮件”的机制,来彻底杜绝脚本之间(游戏对象、UI窗体之间)强耦合现象。
将消息通知进行统一管理分发,注册好处理函数,然后在需要时通知消息中心(MessageCenter)进行触发
将消息通知进行统一管理分发,注册好处理函数,然后在需要时通知消息中心(MessageCenter)进行触发
/// <summary> /// 消息(传递)中心 /// 负责UI框架中,所有UI窗体中间的数据传值 /// </summary> public class MessageCenter { /// <summary> /// 委托:消息传递 /// </summary> /// <param name="kv"></param> public delegate void DelMessageDelivery(KeyValuesUpdate kv); /// <summary> /// 消息中心缓存集合 /// <string : 数据大的分类DelMessageDelivery数据执行委托> /// </summary> public static Dictionary<string, DelMessageDelivery> _dicMessages = new Dictionary< 4000 ;string, DelMessageDelivery>(); /// <summary> /// 增加消息的监听。 /// </summary> /// <param name="messageType">消息分类</param> /// <param name="handler">消息委托</param> public static void AddMsgListener(string messageType,DelMessageDelivery handler) { if (!_dicMessages.ContainsKey(messageType)) { _dicMessages.Add(messageType, null); } _dicMessages[messageType] += handler; } /// <summary> /// 取消消息的监听 /// </summary> /// <param name="messageType">消息分类</param> /// <param name="handele">消息委托</param> public static void RemoveMsgListener(string messageType, DelMessageDelivery handele) { if (_dicMessages.ContainsKey(messageType)) { _dicMessages[messageType] -= handele; } } /// <summary> /// 取消所有指定消息的监听 /// </summary> public static void ClearALLMsgListener() { if (_dicMessages != null) { _dicMessages.Clear(); } } /// <summary> /// 发送消息 /// </summary> /// <param name="messageType">消息的分类</param> /// <param name="kv">键值对(对象)</param> public static void SendMessage(string messageType,KeyValuesUpdate kv) { DelMessageDelivery del = null; if (_dicMessages.TryGetValue(messageType,out del)) { if (del != null) { //调用委托 del(kv); } } } } /// <summary> /// 键值更新对 /// 功能: 配合委托,实现委托数据传递 /// </summary> public class KeyValuesUpdate { private string _Key; private object _Values; /* 只读属性 */ public string Key { get { return _Key; } } public object Values { get { return _Values; } } public KeyValuesUpdate(string key,object valueObj) { _Key = key; _Values = valueObj; } }
相关文章推荐
- Unity游戏开发 全局消息传递
- Unity游戏UI框架(八):监听事件系统
- Unity游戏UI框架(九):实现多语言管理
- Unity 游戏框架搭建 (五) 简易消息机制
- Unity将字符数组转换为字符串向Android传递消息
- 搭建Apache Mina框架并实现Server与Client端的简单消息传递
- 【Apache Mina2.0开发之一】搭建Apache Mina框架并实现Server与Client端消息传递 推荐
- android游戏开发框架libgdx的使用(十一)—Skin和UI配置文件的使用
- 编写苹果游戏中心应用程序(翻译 1.4 添加游戏工具包框架)
- 自己总结的Unity3d RPG网络游戏 UI逻辑 框架(基于NGUI)
- 【Cocos2dx游戏开发】CCNotificationCenter传递消息和数据
- Android UI消息传递机制
- cocos2d-x中调用android UI控件时要通过Handler来传递消息,不然会挂掉
- 框架——消息传递机制
- 基于ExtJS的左右框架和消息传递处理
- android利用apkplug框架实现主应用与插件通讯(传递任意对象)实现UI替换
- android游戏开发框架libgdx的使用(十一)—Skin和UI配置文件的使用
- Symbian上往UI框架应用程序发送消息
- android游戏开发框架libgdx的使用(十一)—Skin和UI配置文件的使用
- Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递