依然是话不多说,直接肝。
/// <summary>
/// 事件中心
/// </summary>
public class EventsCenter : SingleTon<EventsCenter>
{
private EventsCenter()
{
eventsDic = new Dictionary<string, UnityAction<object>>();
}
private Dictionary<string, UnityAction<object>> eventsDic;
/// <summary>
/// 添加监听
/// </summary>
/// <param name="eventname"></param>
/// <param name="action"></param>
public void AddListener(string eventname, UnityAction<object> action)
{
if (eventsDic.ContainsKey(eventname))
{
eventsDic[eventname] += action;
}
else
{
eventsDic.Add(eventname, action);
}
}
/// <summary>
/// 移除监听
/// </summary>
/// <param name="eventname"></param>
/// <param name="action"></param>
public void RemoveListener(string eventname, UnityAction<object> action)
{
if (eventsDic.ContainsKey(eventname))
{
eventsDic[eventname] -= action;
}
}
/// <summary>
/// 触发
/// </summary>
/// <param name="name"></param>
/// <param name="obj"></param>
public void EventTrigger(string name, object obj)
{
eventsDic[name]?.Invoke(obj);
}
/// <summary>
/// 清空事件
/// </summary>
public void Clear()
{
eventsDic.Clear();
}
}
同样的,这是最简单的事件中心。我们在项目里用的要比这个复杂很多。但基本原理都是观察者模式,看懂这个其实再复杂的也只是对这个的补充和细化优化。
下一篇,我打算归置mono模块。
下一篇——Unity程序框架总结归置系列(4)——mono模块