官方教程中实现了一种场景机关玩法,当玩家操控的角色站到压力板上后,旁边的门将打开。如果离开压力板,则门将关闭。
现对该功能的蓝图业务逻辑进行梳理,做一个笔记。
一、蓝图实例说明
本功能由2个蓝图实例和1个蓝图组件共同构成。
BP_PressurePlate是压力板(蓝图类型:Actor)
BP_Door是大门(蓝图类型:Actor)
BP_InterractionComponent是蓝图组件(蓝图类型:ActorComponent),负责消息的播放,用于在2个蓝图实例之间传递消息。
二、BP_InterractionComponent(消息通知组件蓝图)
ActorComponent蓝图组件,有2个自定义事件(custom event)、1个事件分发器。
该组件将挂载到其他蓝图中,由其他蓝图调用。
StartInteraction自定义事件(custom event),调用它将会把事件分发器中的布尔变量On设为True
StopInteraction自定义事件(custom event),调用它将会把事件分发器中的布尔变量On设为Flase
三、BP_PressurePlate(压力板蓝图)
首先需要在蓝图界面坐上以添加的方式将BP_InterractionComponent以组件的形式加入到压力板蓝图中。才可以调用。
BP_InterractionComponent作为了BP_PressurePlate的一个组件后,在事件图表窗口中就可以把蓝图中的自定义事件当作函数来访问和使用了。
四、BP_Door(大门蓝图)
大门蓝图中,需要添加一个触发器变量,将该变量的类型改为{Actor},并且点击右侧的眼睛,使其变为公有类型,用来存放压力板蓝图实例。
然后在场景中选择大门实例,并在【细节】面板,找到Trigger触发器变量,设置引用对象为场景中的压力板实例。
在蓝图事件图表窗口中,拖拽Trigger变量,选择“获取Trigger”,使之成为一个节点,然后在该节点上右键,选择“转换为有效的Get”,使之变为下图所示的带引脚的节点
Trigger引脚输出引用的对象,然后通过“按类获取组件”节点,设置组件类型为BP_InterractionComponent,这部分的业务是从Trigger引用的压力板蓝图实例中获取组件“BP_InterractionComponent”
而在业务逻辑上方的"is Valid"节点,是判断Trigger触发器中的对象是否存在“BP_InterractionComponent”,如果为空则不会执行后续业务逻辑。
这部分的业务是从Trigger引用对象中的“BP_InterractionComponent”组件中,拿到自定义的事件分发器“OnInterract”,并获得其中的布尔值变量On的状态。基于该布尔值的状态进行分支判断,从而执行大门的打开和关闭动画业务逻辑。