事件调度
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,但原理现在不甚清楚,后续会进行研究)