消息中心
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace UIFrame
{
/// <summary>
/// 消息(傳遞)中心
/// 負責UI框架中,所有UI窗體間的數據傳值
/// </summary>
public class MessageCenter
{
// 定義一個委託. 觀察者模式
public delegate void DelegateMessageDelivery(KeyValueUpdate kv);
// 聲明委託實例. 消息中心緩存集合:
// string: 監聽的類型( 數據大的分類),
// DelegateMessageDelivery: 監聽到以後要執行的委託
public static Dictionary<string, DelegateMessageDelivery> _dicMessages
= new Dictionary<string, DelegateMessageDelivery>();
/// <summary>
/// 增加委託指向的方法:監聽消息
/// </summary>
/// <param name="messageType">消息分類</param>
/// <param name="handler">消息委託</param>
public static void AddMsgListener(string messageType, DelegateMessageDelivery handler)
{
if (!_dicMessages.ContainsKey(messageType))
{
_dicMessages.Add(messageType, null);
}
_dicMessages[messageType] += handler;
}
/// <summary>
/// 委託指向的方法:取消消息的監聽
/// </summary>
/// <param name="messageType"></param>
/// <param name="handler"></param>
public static void RemoveMsgListener(string messageType, DelegateMessageDelivery handler)
{
if (_dicMessages.ContainsKey(messageType))
{
_dicMessages[messageType] -= handler;
}
}
/// <summary>
/// 委託指向的方法:取消所有消息的監聽
/// </summary>
public static void RemoverAllMsgListener()
{
if (_dicMessages != null)
{
_dicMessages.Clear();
}
}
/// <summary>
/// 調用(執行)委託 (發送消息)
/// </summary>
/// <param name="messageType">消息的分類</param>
/// <param name="kv">鍵值對(對象)</param>
public static void SendMessage(string messageType, KeyValueUpdate kv)
{
DelegateMessageDelivery del; // 實例化一個委託
if (_dicMessages.TryGetValue(messageType, out del))
{
if (del != null)
{
// 調用執行委託
del(kv);
}
}
}
}
/// <summary>
/// 鍵值對更新類
/// 功能:配合委託,實現委託數據傳遞
/// </summary>
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;
}