Unity事件發送機制

歡迎加入Unity業內qq交流羣:956187480

qq掃描二維碼加羣


1.編寫接口

public interface IMessageHandler {
    void HandleMessage(Messages messages);
}

2.實現接口

public class MessageHandler : MonoBehaviour, IMessageHandler
{
    protected  void Awake()
    {
        MessageDispatcher.Attach(this);
    }
    public virtual void HandleMessage(Messages messages)
    {

    }
    protected  void OnDestroy()
    {
        MessageDispatcher.Detach(this);
    }
}

3.定義消息結構

public class Messages{
    public string Type { get; private set; }
    public object Data { get; private set; }

    public Messages()
    {

    }
    public Messages(string type,object data) {
        this.Type = type;
        this.Data = data;
    }
}

4.註冊並分發消息

public class MessageDispatcher{
    private static  List<IMessageHandler> messageHandlers = new List<IMessageHandler>();

    /// 註冊消息
    public static void Attach(IMessageHandler messageHandler)
    {
        if (messageHandlers.IndexOf(messageHandler) == -1)
        {
            messageHandlers.Add(messageHandler);
        }
    }
    
    /// 消息事件分發
  public static void Dispatch(string type,object data = null)
    {
        Messages msg = new Messages(type, data);
        for (int i = 0; i < messageHandlers.Count; i++)
        {
            messageHandlers[i].HandleMessage(msg);
        }
    }

    /// 移除註冊的消息
    public static void Detach(IMessageHandler handler)
    {
        if (messageHandlers != null)
        {
            messageHandlers.Remove(handler);
        }
    }

5.消息類型

  public const string ShowMainView = "Show_Main_View";
    public const string HideMainView = "Hide_Main_View";

    public const string ShowLoginView = "Show_Login_View";
    public const string HideLoginView = "Hide_Login_View";

6.監聽消息

 public override void HandleMessage(IMessages messages)
    {
        base.HandleMessage(messages);
        switch(messages.Type)
        {
            case MessagesType.ShowErrorView:
              
            case MessagesType.HideErrorView:
                
            default:
                break;
        }
    }

歡迎加入Unity業內qq交流羣:956187480

qq掃描二維碼加羣

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