您当前的位置: 首页 >  unity

Peter_Gao_

暂无认证

  • 0浏览

    0关注

    621博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

unity UIForm框架的消息系统

Peter_Gao_ 发布时间:2020-05-29 10:41:05 ,浏览量:0

消息中心

 

using System.Collections; using System.Collections.Generic; using UnityEngine;

namespace UIFrame {     ///     /// 消息(传递)中心     /// 负责UI框架中,所有UI窗体间的数据传值     ///     public class MessageCenter     {         // 定义一个委托. 观察者模式         public delegate void DelegateMessageDelivery(KeyValueUpdate kv);

        // 声明委托实例. 消息中心缓存集合:          // string: 监听的类型( 数据大的分类),         // DelegateMessageDelivery: 监听到以后要执行的委托         public static Dictionary  _dicMessages              = new Dictionary();

        ///         /// 增加委托指向的方法:监听消息         ///         /// 消息分类         /// 消息委托         public static void AddMsgListener(string messageType, DelegateMessageDelivery handler)         {             if (!_dicMessages.ContainsKey(messageType))             {                 _dicMessages.Add(messageType, null);             }             _dicMessages[messageType] += handler;         }

        ///         /// 委托指向的方法:取消消息的监听         ///         ///         ///         public static void RemoveMsgListener(string messageType, DelegateMessageDelivery handler)         {             if (_dicMessages.ContainsKey(messageType))             {                 _dicMessages[messageType] -= handler;             }         }

        ///         /// 委托指向的方法:取消所有消息的监听         ///         public static void RemoverAllMsgListener()         {             if (_dicMessages != null)             {                 _dicMessages.Clear();             }         }

        ///         /// 调用(执行)委托 (发送消息)         ///         /// 消息的分类         /// 键值对(对象)         public static void SendMessage(string messageType, KeyValueUpdate kv)         {             DelegateMessageDelivery del;   // 实例化一个委托             if (_dicMessages.TryGetValue(messageType, out del))             {                 if (del != null)                 {                     // 调用执行委托                     del(kv);                 }             }         }

    }

    ///     /// 键值对更新类     /// 功能:配合委托,实现委托数据传递     ///     public class KeyValueUpdate     {         private string _Key;         private object _Values;         public string Key { get { return _Key; } }         public object Values { get { return _Values; } }

        // 构造函数初始化字段         public KeyValueUpdate(string key, object valueObj)         {             _Key = key;             _Values = valueObj;         }     }

}

 

    /// 键值对更新类     /// 功能:配合委托,实现委托数据传递

 

窗体基类封装消息系统方法

  private void Awake()         {

            if(MsgTypeName != "")             {                 ReceiveMessage(MsgTypeName, ReceiveMsg);  //委托方法                 Debug.Log("注册接收消息,消息类型“);             }         }

 

如何使用:

SendMessage("TimerScriber", "StartCountTimer");

”TimerScriber"是参数 messageType 即消息类型,

“StartCountTimer” 是参数 msgName 即消息名称,

第三个参数消息内容 msgContent 这里为空Null。

 

 

    protected override void Initialization()     {         MsgTypeName = NAME;     }

 

参考:

饿了要吃,累了要睡 https://blog.csdn.net/wait_for_eva/article/details/106857839

消息系统设计 https://blog.csdn.net/yye4520/article/details/80465251

 

 

关注
打赏
1664521772
查看更多评论
立即登录/注册

微信扫码登录

0.5336s