我对事件监听中心的理解是,某一个物体在触发其下某一个事件时,所带来的连锁反应
为了降低程序的耦合,减少依赖性,我们构造一个单例的事件监听中心
在该事件监听中心里,我们处理所有事件的所有连锁反应
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// 某一个事件 所引发 的连锁反应
/// </summary>
public class EventCenter : SingletonBase<EventCenter>
{
//用字典存储 所有事件 以及 事件的所有关心者
private Dictionary<string, UnityAction> eventDic = new Dictionary<string, UnityAction>();
//事件触发
public void EventTrigger(string name)
{
if (eventDic.ContainsKey(name))
eventDic[name]?.Invoke();
}
//添加 某一个事件 的 关心者
public void AddEventListener(string name, UnityAction func)
{
if (eventDic.ContainsKey(name))
eventDic[name] += func;
else
{
eventDic.Add(name, null);
eventDic[name] += func;
}
}
//移除 某一个事件 的 关心者
public void RemoveEventListener(string name, UnityAction func)
{
if (eventDic.ContainsKey(name))
eventDic[name] -= func;
}
//移除 事件中心 的 所有事件
public void Clear()
{
eventDic.Clear();
}
//移除 某一个事件
public void Clear(string name)
{
if (eventDic.ContainsKey(name))
eventDic.Remove(name);
}
}
值得一提的是
每一个关心者都应该在Awake的时候去关心事件,在OnDestroy的时候移除关心事件