使用计时器(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 节点并在函数名称中输入你的自定义事件的名称。

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