Title here
Summary here
目前主要提供了以下几种监听事件的方式:
类型 | 描述 |
---|---|
DidaEventListenerComponent | 可以添加到一个允许添加Component的对象,会在BeginPlay的时候根据配置监听事件 |
DidaEventListenerWidget | 可以添加到一个允许添加Widget的对象,会在Construct的时候根据配置监听事件 |
DidaEventListenerVariable | 最为通用的一个监听器,允许在任何地方放置,需要自己调用函数绑定监听 |
DidaEventMultiListenerComponent | 比起DidaEventListenerComponent,它允许监听多个事件 |
DidaEventMultiListenerWidget | 比起DidaEventListenerWidget,它允许监听多个事件 |
DidaEventMultiListenerVariable | 比起DidaEventListenerVariable,它允许监听多个事件 |
以DidaEventListenerVariable为例,可以通过CreateListenerVariable创建一个监听器。
如果创建了一个ListenerVariable,那么还应持有他的引用,防止Listener被GC而无法收到事件。
下面是相关参数的说明:
参数 | 描述 |
---|---|
Outer | 用作实例化Variable的Outer,同时会被用作获取EventSubsystem |
Event | 所需要触发的事件 |
OnEventInvoked | 触发事件后的回调 |
Channel | 所监听的频道,只有不设Channel或相同Channel的事件会被触发 |
PriorityLayer | 优先级层级,会根据层级与优先级大小判断优先级 |
ListenerPriority | 优先级大小,会根据层级与优先级大小判断优先级 |
bShouldRegisterOnStart | 是否在注册时绑定监听,否则可手动调用RegisterChannelListener等 |
优先级决定了事件触发多个监听器时的顺序,优先级大的会被先触发
为了定义清晰,应优先使用分层来定义优先级大小
会先判断优先级枚举,枚举值越大则优先级越大
不允许同一个DidaEventListenerInterface多次监听同一事件,重复注册监听无效。即使注册时设置不同Channel也不允许,真的需要可先解除旧的注册或创建多个实例。
允许一个DidaEventListenerInterface监听多个事件,此时每个事件触发都会调用OnEventCalled,会导致逻辑较难维护,因此还是推荐一个DidaEventListenerInterfac对应一个Event。如果真的需要监听多个事件,可以使用DidaEventMultiListenerXXX相关接口。
为了更高级的监听用途,或者不想创建额外的对象,目前允许把一个现有的对象设置为监听器。
只需要把一个基于UObject的类加上DidaEventListenerInterface接口,并实现相关逻辑即可。