我们在这一章需要为玩家增加一些难度。
这一章中需要完成的任务:
- 玩家冲刺时,体力值下降
- 玩家子弹打完后无法开枪射击
- 允许玩家捡取弹夹来补充弹药
- 定义玩家获胜需要消灭的目标数量
- 设置一个允许玩家在获胜后重玩或结束游戏的菜单
4.1 限制玩家行为
4.1.1 冲刺时减少体力值
我们回到FirstPersonCharacter蓝图中。首先,我们需要设计两个变量来追踪玩家是否在冲刺。创建浮点型SprintCost默认值为0.1,创建布尔型IsSprinting?。我们找到冲刺功能的模块,注释为Sprint。
我们将设计一个自定义事件来使在玩家冲刺中体力值均匀下降。任何另一个蓝图调用该自定义事件的时候,能够触发此事件附属的蓝图。通过这种方式,同一蓝图中的节点群能够彼此沟通,哪怕它们并非直接相连。
创建一个名称为Sprint Drain的自定义事件节点,后续将被调用和触发。
我们创建一个Set Player Stamina节点,然后从输入引脚创建一个Max(float)节点。我们要确保玩家的体力始终大于0,所以讲其中一个引脚的值保留为0.0,从另一个引脚创建一个Float-Float节点。然后从float节点创建一个Get Player Stamina节点。
接着我们使用一个自定义的公有变量,将它添加到Float-Float节点的一个引脚。这样可以持续的微调减少消耗体力值和检查体力是否正在消耗的变量。在这里将使用sprint cost变量。
当玩家的体力值为0时,限制冲刺功能并停止减少体力值。这将作为我们分支的判断条件,我们创建一个Float>=Float节点连接两个获取变量值。
当玩家没有足够体力时,玩家需要回到行走状态、清除计时器并调用自定义事件 Sprint Drain。
接下来我们添加以函数名清除定时器节点,在函数名处输入Sprint Drain。
最后的蓝图如下:
下一步需要通过蓝图中新的自定义事件来管理冲刺功能。
4.1.2 使用循环计时器来重复动作
下面我们要自定义sprint蓝图模块来触发自定义事件Sprint Drain。我们找到之前的模块: