UE4之Event Dispatchers讲解
Event Dispatchers
事件调度程序,可以全局调用。
提示
当前文章使用的版本是v4.16。
1. 创建一个事件调度程序
进入关卡蓝图(其他事件蓝图也可以),点击 Event Dispatchers后面的 + 号,命名后拖动到场景中。
2. 参数讲解
- Call 呼叫,触发绑定事件。
- Bind 绑定事件。
- Unbind 取消绑定。
- Unbind all 取消绑定所有。
- Event 创建一个事件,和 Add Custom Event节点一样。
- Assign 创建一个绑定了事件的绑定事件节点。
3. 展示一下
- 在同一个蓝图中展示。
- 在不同的蓝图中展示,在关卡蓝图中呼叫类蓝图中的事件,需要创建一个蓝图类,然后实例化。
- 创建一个蓝图类
- 在蓝图类中创建一个事件调度器,然后绑定一个事件。
- 在关卡蓝图中触发蓝图类中的事件,但是必须要有Target目标类才行。
- 创建一个蓝图类
4. 一个小例子
- 首先创建两个蓝图类
第一个类作为接收类,第二个类为触发类。首先说明一下总体效果。在游戏开始时候场景中的椅子向桌子移动,直到碰到桌子为止。然后桌子开始旋转。先写椅子类的蓝图。
1. 首先,添加 EventBeginPlay 事件,在游戏开始时候触发,判断是否需要移动是就移动不是就旋转桌子。
2. 每次判断都会增加椅子的X的方向的值,然后延时一定时间后再次触发,产生迭代。
3. 也可以使用定时器来增加值,碰到后就清除定时器。在这里就不列出此种方法。当为false,也就是碰撞到了目标后就不产生迭代,转而触发桌子类的蓝图事件,所以我们需要获取到桌子类。首先先创建一个变量,将类型改变为桌子类的类名,然后转化为公共变量。
- 回到操作界面,改变以下值为桌子类。然后回到蓝图界面,创建节点Call Rotate将变量拖出来赋予给目标值,当然需要事先为第一个类创建一个Event Dispatchers命名为Rotate,在第六步中可看见。
- 需要检测碰撞,进入viewport界面,添加一个box组件,然后通过检测box的碰撞来触发改变bool值使其不再移动。
- 现在来写第一个蓝图的类,在这个类中,只需要创建一个 Event Dispatchers事件调度程序,然后绑定一个事件即可。
- 首先,在游戏开始的时候绑定一个事件,触发事件后旋转桌子一圈。TimeLine是该事件的核心,通过TimeLine返回来的值不断的改变桌子的角度,达到旋转动画的效果。
- 也可以使用其他办法来改变,比如迭代或者定时器。
5. 总结
- Event Dispatchers类似于事件代理,将需要触发的事件代理给一个总事件由该事件来触发被代理事件。
- 可以实现蓝图类与蓝图类之间的调用,关卡蓝图和蓝图类相互的调用等多方调用,是一个比较常用的功能。