1.6 改变目标方向
如果现在编译、保存蓝图,然后开始测试游戏,你期待看到什么结果?目标圆柱体会在游戏开始的时候根据设定的速度和方向移动。然而,由于我们没有任何引起目标停止运动的指令,所以目标圆柱体将随着游戏运行一直移动,甚至会穿越场景中的对象。为了解决这个问题,我们需要一个逻辑来周期性的改变目标的方向。这将使目标像移动的标靶一样,在两点之间规律地来回移动。
我们需要设置两个节点,为方向变量设置两个不同的值。拖曳direction变量至事件图表的空白区域并选择设置,生成一个有X、Y、Z坐标的节点。我们可以用它来改变direction变量的值,使这个值与我们赋予的初始值不同。我们希望有两个这种类型的节点,再拖曳direction变量至空白区域生成另一个节点,将这两个节点的Y轴的值分别设为10和-10。
现在我们需要一个方法在这两个节点之间转换,使方向就会重复地改变。希望两组动作(action)在每次切换之前交替执行一次时,可以使用FlipFlop节点。这适用于我们这个项目,所以鼠标右键单击事件图表的空白区域搜索“FlipFlop”,选择并放置好节点,然后与刚创建的两个direction节点连接。
最后,我们需要确保在执行方向转换之间有一些延迟。否则,方向将会在每一帧都改变,目标对象也就不会移动了。为了实现这一步骤,从FlipFlop节点的执行引脚拖出引线至空白区域,搜索Delay节点。这个节点将允许我们设置一个以秒为单位的延迟时间,而在这个节点以后的执行命令将会被延迟这段时间后执行。将Delay节点放在Set Actor Transform节点和FlipFlop节点之间,设置延迟时间为6秒。在6秒的延迟后,执行FlipFlop的转换功能。最终的结果如图1.30所示,如果你完成了,请编译并保存蓝图。
测试移动的目标
现在我们已经将蓝图更新过了,可以测试查看目标圆柱体对象是否按照预期进行移动。首先,我们需要将目标圆柱体对象放在Y轴方向上没有障碍物的地方,确保在Y轴上运动不会与其他物体碰撞,这里采用的坐标是(410,680,180),仅供大家参考。
单击播放按钮,如果蓝图正常工作的话,你将会看到圆柱体在两个定点之间来回的移动。
使用蓝图的优点之一是它创建了一个功能性模板,这个模板可以被场景中的很多对象进行使用。在Blueprints文件夹中找到CylinderTarget_Blueprint并将它直接拖到3D视图中,可创建另一个继承原始目标圆柱体功能的圆柱体。通过这个方法,我们通过仅仅使用设置蓝图逻辑,就可以快速地创建很多移动的目标。