EgoEventCenter全局
EventCenter部分

<!doctype html>

事件中心

事件中心

设计思路

在游戏中,许多事件之间往往会相互触发,比如“怪物死亡”会调用“玩家经验增加”+"任务记录杀死怪物数”+“其他”等事件。如果是这个逻辑的话,在“怪物死亡”的函数中就需要写调用“其他事件所对应的函数”的代码,同理每一个 “需要调用其他函数的函数” 都需要重复写这些代码,导致每一个函数都与很多个函数关联,逻辑复杂,就增加了函数的耦合度,重复代码太多,维护起来也会特别麻烦。这时候如果有事件中心的话,好处就很明显了。

Unity的SendMessage其实就是一个事件中心思想。

作用

  • 减少函数的耦合度

    事件中心就好比是一个中间人,负责监察各个事件的发生,然后去调用 “与之相关的函数” ,这样,就不需要在 “事件所对应的函数” 中编写调用 ”与之相关的函数“ 的代码了,只需被调用的函数委托事件中心:”当某某某事件发生时就调用我“

  • 扩展模块特别容易

    比如“怪物死亡”后,往事件中心发送“怪物死亡事件”,其他任何模块可随时监听“怪物死亡事件”,进行UI的展示等等,不会对“怪物死亡”造成依赖关系。

  • 程序变得更加容易维护

    不需要的模块,能立马做到热插拔,比如说“怪物死亡”模块本来会导致“任务记录更新”,新需求换了,没有任务更新了,直接把任务更新模块禁用掉即可,不会对其他模块造成任何影响。

使用示例

对任务进度进行监听,显示对应UI。


接口介绍

EgoEventCenter类

EgoEventCenter是游戏中共用的一个事件中心,如需自己创建特地区域的事件中心,可以new EventCenter()即可创建。

接口名说明
PostEvent(string eventName)发送无参数事件
PostEvent(string eventName, T value)发送一个带参数事件
PostEvent<T1, T2>(string eventName, T1 value1, T2 value2)发送两个带参数事件
PostEvent<T1, T2, T3>(string eventName, T1 value1, T2 value2, T3 value3)发送三个带参数事件
AddListener(string eventName, EventHandle handle)监听无参数事件
AddListener(string eventName, EventHandle handle)监听一个参数事件
AddListener(string eventName, EventHandle handle)监听一个参数事件
AddListener<T1, T2>(string eventName, EventHandle<T1, T2> handle)监听两个参数事件
AddListener<T1, T2, T3>(string eventName, EventHandle<T1, T2, T3> handle)监听三个参数事件
RemoveListener(string eventName, EventHandle handle)移除无参数事件
RemoveListener(string eventName, EventHandle handle)移除一个参数事件
RemoveListener(string eventName, EventHandle handle)移除一个参数事件
RemoveListener<T1, T2>(string eventName, EventHandle<T1, T2> handle)移除两个参数事件
RemoveListener<T1, T2, T3>(string eventName, EventHandle<T1, T2, T3> handle)移除三个参数事件
RemoveEvent(string eventName)移除对应事件的所有监听
RemoveAllEvent()移除事件中心的所有事件