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

来源:互联网 发布:青岛中山路美食 知乎 编辑:程序博客网 时间:2024/06/05 18:54

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<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;    }}
原创粉丝点击