首先你需要先建一个单例:比如:
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框架中有一种更好的事件系统,仅在此备注。