使用计时器(Timer)

关于如何在使用虚幻引擎 4 时在游戏中使用计时器的操作指南。

Choose your operating system:

Windows

macOS

Linux

本页面的内容

虚幻引擎 4 中的 Timers 是一种很有用的工具,可以按指定的时间间隔执行一次(或重复多次)动作。计时器可用于将动作设置为延迟发生或在一段时间内发生。例如,你可能要让玩家在获得某个特定物品后进入无敌状态,然后在10秒后恢复正常。或者是对站在火里的玩家每秒施加一定伤害。无论哪种情况都可以通过计时器实现。

实现指南

本页面的内容

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

创建和清除计时器

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

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

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

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

    GHT6B_1.png

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

    GHT6B_2.png

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

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

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

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

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

  8. Set Timer by Function Name 节点的 Return Value 引脚连到 Clear Timer by Handle 节点的 Handle 引脚。

    GHT6B_3.png

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

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

    GHT6B_4.png

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

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

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

    GHT6B_5.png

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

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

    GHT6B_6.png

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

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

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

    GHT6B_7.png

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

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

    GHT6B_8.png

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

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

    GHT6B_8b.png

  19. Compile Save ,然后关闭蓝图。

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

    GHT6B_9.png

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

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

其他计时器相关节点

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

Get Timer Elapsed 和 Get Timer Remaining

GHT6B_10.png

Get Timer Elapsed Get 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 Exists Is Timer Active Is Timer Paused 节点全都会返回 True False 值,分别用于确定计时器是否存在、计时器当前是否激活,以及计时器当前是否暂停。

Set Timer Delegate

GHT6B_13.png

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

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消