一个简单的消息中心

首先你需要先建一个单例:比如:

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
//单例示范
public   class Singleton <T> where T : class,new()
{
    private static T  instance;
    public static  T Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new T();
            }

            return instance;
        }
    }
}
//单例示范
public class Client
{
     static Client instance=new Client();
     public static Client Instance => instance;
}

然后就是消息中心了:

using System;
using System.Collections.Generic;

public class MessangerCenter : Singleton<MessangerCenter>
{
    //用一个字典保存所有事件
    Dictionary<int, Action<object>> m_ = new Dictionary<int, Action<object>>();

    //添加事件
    public void Add(int id, Action<object> action)
    {
        if (m_.ContainsKey(id))
        {
            m_[id] += action;
        }
        else
        {
            m_.Add(id, action);
        }
    }

    //移除事件
    public void Remove(int id, Action<object> action)
    {
        if (m_.ContainsKey(id))
        {
            m_[id] -= action;
            if (m_[id] == null)
            {
                m_.Remove(id);
            }
        }
    }

   //发送消息号触发事件
    public void Send(int id, params object[] arr)
    {
        if (m_.ContainsKey(id))
        {
            m_[id](arr);
        }
    }


}

 下面是一个简单的示例:分别是添加事件和触发

//添加   
 MessangerCenter.Instance.Add(1001, Skill);

    public void Skill(object obj)
    {
        object[] arr=obj as object[];
        int skillid = (int)arr[0];
        string path = SkillMgr.skillDic[skillid].animpath;
        SetAnim(path);
    }

//触发

MessangerCenter.Instance.Send(1001, 0);

其实这种并不算好,qf框架中有一种更好的事件系统,仅在此备注。

猜你喜欢

转载自blog.csdn.net/qq_46043095/article/details/129709117