您的位置:首页 > 移动开发 > Unity3D

Unity游戏UI框架(七):消息传递中心

2017-06-19 21:58 627 查看
Unity游戏项目中存在多种数值(消息)的传递方式,但是大多数的消息传递方式,耦合性太高造成项目模块的“复用性”降低,采用“消息中心”的思想,开发类似“发邮件”、“收邮件”的机制,来彻底杜绝脚本之间(游戏对象、UI窗体之间)强耦合现象。

将消息通知进行统一管理分发,注册好处理函数,然后在需要时通知消息中心(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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: