在蓝图中使用计时器(Timer)

本页面的内容:

本页介绍了如何在蓝图中使用 Timers 实现游戏目的,以及与 Timer 相关的节点。

创建和清除计时器

以下步骤将向您介绍如何在蓝图中创建/设置计时器。

在本示例中,我们将使用 Blueprint Third Person Template 并对玩家随时间造成火焰伤害。

  1. 在您的项目中,打开 ThirdPersonCharacter 蓝图。

  2. 在图表中 Right-click 并添加两个 Custom Events,分别叫做 PlayerInFirePlayerNotInFire

    GHT6B_1.png

  3. MyBlueprint 窗口中,添加一个新的 Function,取名为 FireDamage

    GHT6B_2.png

    此函数将被 Timer 随时间调用并施加伤害。

  4. 拖开 PlayerInFire 事件并添加 Set Timer 节点。

  5. 拖开 PlayerNotInFire 事件并添加 Clear Timer 节点。

  6. 对于 Set TimerClear Timer,需要将 Function Name 设置为 FireDamage

  7. Set Timer 上,将 Time 设置为 0.75 并选中 Looping 选框。

    GHT6B_3.png

    输入的 Time 就是调用 Function Name 函数的间隔时间(间隔0.75秒)。

  8. 新建一个名为 PlayerHealthInt 变量,点击 Compile,然后将 Default Value 设置为 100

    GHT6B_4.png

  9. FireDamage 函数内,按住 Alt 键,同时将 PlayerHealth 变量拖入到图表。

  10. 按住 Control 并拖入 PlayerHealth 变量。

  11. 拖开 PlayerHealth 变量并添加一个 Integer - Integer 节点,然后拖出0针并添加一个 Random Integer in Range 节点。

    GHT6B_5.png

    我们使用了一个带有最小值(1)和最大值(4)的**Random Integer in Range**节点,但您也可以随意输入一个伤害值。

  12. Set 节点连出来,添加一个 Print String,然后按住 Control 并拖入 PlayerHealth,将其连接至 Print String

    GHT6B_6.png

    在本示例中,我们没有显示生命条;但以上设置将让我们看到生命值其实正在下降。

  13. 打开 Blueprint_Effect_Fire 蓝图,然后单击 Components 选项卡。

  14. 单击 Add Component 按钮并添加一个 Box 形状,将其命名为 Trigger(触发器)。

    GHT6B_7.png

    当玩家进入/退出这个 Trigger 时,我们将调用 ThirdPersonCharacter 蓝图中的事件。

  15. 返回 Graph 选项卡并 Right-click 这个 Trigger,然后添加 OnComponentBeginOnComponentEnd 重叠事件。

    GHT6B_8.png

  16. 拖开其各自的 Other Actor 针并添加 Cast To ThirdPersonCharacter 节点。

  17. 拖开 As Third Person Character C 针并添加(Begin节点的)PlayerInFire 和(End节点的)PlayerIsNotInFire 事件。

    GHT6B_8b.png

  18. CompileSave,然后关闭蓝图。

  19. Content Browser 中,将 Blueprint_Effect_Fire 蓝图拖入关卡。

    GHT6B_9.png

  20. 单击 Play 按钮以便通过编辑器运行游戏,这时如果角色进入到火中,您将看到其开始受到伤害。

这个示例介绍了如何用计时器实现随时间累计伤害效果;但您也可以使用计时器呈现其他应用,例如,可以让玩家持续X秒钟所向无敌或拥有某种能力的强化道具。

其他计时器相关节点

Set TimerClear Timer 节点可用于开始/停止计时器,而下面的节点也可能满足您的其他需要。

Get Timer Elapsed 和 Get Timer Remaining

GHT6B_10.png

Get Timer ElapsedGet Timer Remaining 节点分别用于获取指定计时器(由 FunctionName 指定)从开始后经过的时间,以及指定计时器的剩余时间。 它将返回浮点值,而且可用于几种不同目的,例如,随时间改变某种效果或在效果即将失效时提供一条消息。

Pause Timer 和 Un Pause Timer

GHT6B_11.png

顾名思义,Pause Timer 能将计时器暂停在当前时间,而 Clear Timer 能使其完全停止并重置。Un Pause Timer 节点可用于恢复暂停的计时器并从它之前停止的地方开始。 这种设定有很多实际用途,例如,当玩家被施加了一个基于计时器的效果,然后又进入了菜单或物品栏界面,而您希望暂停该效果并在他们返回游戏时将其恢复。

Timer Exists、Is Timer Active 和 Is Timer Paused

GHT6B_12.png

Timer ExistsIs Timer ActiveIs Timer Paused 节点全都会返回 TrueFalse 值,分别用于确定计时器是否存在、计时器当前是否激活,以及计时器当前是否暂停。

Set Timer Delegate

GHT6B_13.png

Set Timer Delegate 节点的作用类似于 Set Timer 节点,但前者并不指定函数名称,您可以连接一个要启动的 Custom Event。和 Set Timer 节点一样,您也可以将它设置为循环执行。 要清除计时器,您可以使用 Clear Timer 节点并在函数名称中输入您的自定义事件的名称。