
EventCenter.cs
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Events;//里氏转换的空接口public interface IEventInfo { }public class EventInfo<T> : IEventInfo{public UnityAction<T> actions;public EventInfo(UnityAction<T> action){actions += action;}}public class EventInfo : IEventInfo{public UnityAction actions;public EventInfo(UnityAction action){actions += action;}}//事件中心public class EventCenter : BaseManager<EventCenter>{private Dictionary<string, IEventInfo> eventDic = new Dictionary<string, IEventInfo>();/// <summary>/// 添加事件监听+泛型/// </summary>/// <param name="name"></param>/// <param name="action"></param>public void AddEventListener<T>(string name, UnityAction<T> action){//字典有if (eventDic.ContainsKey(name)){(eventDic[name] as EventInfo<T>).actions += action;}//无else{eventDic.Add(name, new EventInfo<T>(action));}}/// <summary>/// 添加事件监听 无泛型/// </summary>/// <param name="name"></param>/// <param name="action"></param>public void AddEventListener(string name, UnityAction action){//字典有if (eventDic.ContainsKey(name)){(eventDic[name] as EventInfo).actions += action;}//无else{eventDic.Add(name, new EventInfo(action));}}/// <summary>/// 移除监听+泛型/// </summary>/// <param name="name"></param>/// <param name="action"></param>public void RemoveEventListener<T>(string name, UnityAction<T> action){if (eventDic.ContainsKey(name)){(eventDic[name] as EventInfo<T>).actions -= action;}}/// <summary>/// 移除监听 无泛型/// </summary>/// <param name="name"></param>/// <param name="action"></param>public void RemoveEventListener(string name, UnityAction action){if (eventDic.ContainsKey(name)){(eventDic[name] as EventInfo).actions -= action;}}/// <summary>/// 事件触发+泛型/// </summary>/// <param name="name"></param>/// <param name="info"></param>public void EventTrigger<T>(string name, T info){//字典有if (eventDic.ContainsKey(name)){//eventDic[name]();//eventDic[name].Invoke(info);//if ((eventDic[name] as EventInfo<T>).actions != null){(eventDic[name] as EventInfo<T>).actions.Invoke(info);}}}/// <summary>/// 事件触发 无泛型/// </summary>/// <param name="name"></param>/// <param name="info"></param>public void EventTrigger(string name){//字典有if (eventDic.ContainsKey(name)){//eventDic[name]();//eventDic[name].Invoke(info);//if ((eventDic[name] as EventInfo).actions != null){(eventDic[name] as EventInfo).actions.Invoke();}}}public void check(){Debug.Log(eventDic.Count);}//清空事件中心主要在场景切换public void Clear(){eventDic.Clear();}}