UE4 蓝图事件调度器Event Dispatcher
1.事件调度器的含义
事件调度器是蓝图中按照观察者模式(订阅)而添加的。观察者模式较常用的一种设计模式!他具有高效低耦合的特性! 在整个设计链上, 采用有动态这状态改变时主动发出通知,从而达到订阅特性。
观察者模式应当构建对象,应该将对象想象为观察者和被观察者。
2.蓝图中事件调度器的位置
3.如何使用事件调度器Event Dispatcher
要使用事件调度器(订阅者模式/观察者模式),至少要两个对象。
案例:
通过一个对象控制场景中所有的灯。
1.灯的创建:
1.创建一个蓝图类,基于Actor的类,命名为Light。
2.给灯添加一个Point Light的组件
3.在场景中复制多个灯
2. 创建一个灯的开关Toggle和事件调度器
1.目的:通过开关控制所有场景中所有的灯,实现统一开/关,不管添加了多少个灯,开关都能统一开灯关灯。
2.创建蓝图类 基于Actor的类,命名为 BP_Toggle
3.在Toggle添加一个事件调度器,给事件调度器取个名字 Dispatcher_ToggleLight添加后不要点编译,确定好了没写错再点编译。
4.将BP_Toggle的输入设置为Player0,方便接收输入来实现开关灯
3.编写开关灯的逻辑
1.在灯的蓝图里添加一个自定义事件Toggle
4绑定上事件调度器
1.便利世界中Actor的队列
2.获得以BP_Light的父类的所有Actor
3.每一个都绑定上事件调度器,使用Bind Event to Dispatch节点
4.将开关灯的时间与Bind Event to Dispatch Toggle Light连接上,红色连红色。
5.在Toggle里调用Dispatcher_ToggleLight
打开Toggle类里,使用按键来控制Q,Q的一侧连接Call Dispatch Dispatcher_ToggleLight。
4.运行测试
按下Q关灯,再按就开灯。
关灯。
5.取消绑定时间调度器
1.使用UnBind Event Dispatch from Dipatcher Toggle Light
2.目的:实现一次关闭所有灯,就在也不开灯了
3.测试:
6.结构图
灯的完整蓝图
7.应用
比如你做了一辆车,可以通过时间调度器来实现开车的大灯,如果车灯坏了,就可以在有东西导致它坏了的时候触发接触绑定事件调度器。
再比如:你的一个场景里有个大Boss,有很多小怪,当大Boss愤怒值下降了的时候,就召唤场景里所有的小怪来抵挡,当大Boss死亡了,就将小怪里的召唤的事件调度器解绑了,然后小怪自己溜了。