unity 消息發送處理機制

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

/// <summary>
/// 消息類
/// </summary>
public class Message
{

    public string Name  //發送消息的名稱
    {
        get;
        private set;
    }

    public object Body  //消息主體
    {
        get;
        private set;
    }

    public Message(string name, object body)
    {
        Name = name;
        Body = body;
    }
}

/// <summary>
/// 消息中心
/// </summary>
public class MessageCenter  {

    public delegate void messageDelHandle(Message message);

    private static MessageCenter instance;
    public static MessageCenter Instance
    {
        get
        {
            if (instance==null)
            {
                instance = new MessageCenter();
            }
            return instance;
        }
    }

    private Dictionary<string, messageDelHandle> messageMap = new Dictionary<string, messageDelHandle>();

    /// <summary>
    /// 註冊監聽
    /// </summary>
    public void RigisterListener(string messageName,messageDelHandle handle)
    {
        if (handle == null) return;
        if(!messageMap.ContainsKey(messageName))
        {
            messageMap.Add(messageName, handle);
        }
    }

    /// <summary>
    /// 移除監聽
    /// </summary>
    public void RemoveListener(string messageName,messageDelHandle handle)
    {
        if (!messageMap.ContainsKey(messageName))
            return;
        messageMap[messageName] -= handle;
        if (messageMap[messageName] == null)
        {
            messageMap.Remove(messageName);
        }
    }

    /// <summary>
    /// 發送消息
    /// </summary>
    /// <param name="messageName">消息名稱 </param>
    /// <param name="body"> 發送消息主體 </param>
    public void SendMessage(string messageName,object body = null)
    {
        if (!messageMap.ContainsKey(messageName))
            return;
        messageDelHandle handle;
        messageMap.TryGetValue(messageName, out handle);
        if(handle!=null)
        {
            handle(new Message(messageName, body));
        }
    }

}



/// <summary>
/// 發送的消息名
/// </summary>
public class MessageName  {

    public const string START_UP = "StartUp";   //遊戲啓動
}



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

public class MessageSend : MonoBehaviour {

	void Update ()
    {
        if (Input.GetMouseButtonDown(0))
        {
            MessageCenter.Instance.SendMessage(MessageName.START_UP);
        }
	}
   
}



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

public class MessageReceive : MonoBehaviour {

	void Awake ()
    {
        MessageCenter.Instance.RigisterListener(MessageName.START_UP, StartUp);
    }

     private void StartUp(Message message)
     {
        Debug.Log("遊戲啓動");
     }

    private void OnDestroy()
    {
        MessageCenter.Instance.RemoveListener(MessageName.START_UP,StartUp);
    }

 
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章