事件调度

1.蓝图接口(blueprint interface)
何时使用
数个蓝图中存在一些相似功能,但在调用后执行不同的效果。
玩家拥有一个火焰喷射器,使用时将触发一个名为 ElementalDamage 的事件。树木蓝图接受 ElementalDamage 调用并将树木烧毁,而雪人蓝图将把雪人融化。
玩家拥有一个“use”按钮,按下按钮可执行开门、关灯、拾起道具等操作。
敌人拥有特殊能力,可基于玩家的体力值完成变化,执行不同操作。

需要创建一个蓝图接口函数,即blueprint interface
蓝图通信的三种方式实例展示
然后在被调用的Actor里,需要在class settings里设置相应的蓝图接口
蓝图通信的三种方式实例展示
蓝图通信的三种方式实例展示

同时需要在BPI中声明相应的函数,然后对应函数需要在被调用函数里进行定义
蓝图通信的三种方式实例展示
最终使用时,需要在调用者中设置如下(使用actor has tag进行判断,因为如果多个actor使用多个接口函数,可能会存在调用顺序的问题,如果只有一个可以只使用get,参数为0进行调用即可)
蓝图通信的三种方式实例展示
注意:
1.被调用actor放入level中多个时,如果采用下图这种方式,只会有一个被触发
蓝图通信的三种方式实例展示
当采用下图这种方式时,可以全部触发
蓝图通信的三种方式实例展示
当采用下图方式时,可以触发想要触发的actor
蓝图通信的三种方式实例展示

当然同一个接口函数,也可以在别的蓝图中使用,同名事件流程不同,调用时对应不同的actor即可。

2.事件调度器
何时使用
需要从角色蓝图到关卡蓝图进行通信。
玩家角色升级,需要开放之前锁定的区域。
玩家角色按下行动按钮,对关卡执行某种操作。
生成的 Actor 执行某种操作时触发事件。
生成一个 Boss,Boss 被消灭时触发事件,在世界场景中生成一个奖励。
在关卡中生成一个道具(武器、回复剂等)并在道具被拾起时告知道具和角色。

调用者创建调度器
蓝图通信的三种方式实例展示
可以设置相应的inputs也可以不设置
蓝图通信的三种方式实例展示
被调用actor的操作如下
蓝图通信的三种方式实例展示
结果展示
蓝图通信的三种方式实例展示
3.直接通信
调用者
蓝图通信的三种方式实例展示
也可以采取这种方式,设置一个变量,变量的类型为想要调用的actor

蓝图通信的三种方式实例展示
蓝图通信的三种方式实例展示
被调用者
蓝图通信的三种方式实例展示
结果
蓝图通信的三种方式实例展示
容易出现的问题
蓝图通信的三种方式实例展示
这种很好解决,别忘了往level中放置相应的actor(算是很低级的事务,我一度怀疑人生)

其实应该还有一张蓝图投射(即cast to,但原理现在不甚清楚,后续会进行研究)

相关文章: