Choose your operating system:
Windows
macOS
Linux
虚幻引擎 4 中的 Timers 是一种很有用的工具,可以按指定的时间间隔执行一次(或重复多次)动作。计时器可用于将动作设置为延迟发生或在一段时间内发生。例如,你可能要让玩家在获得某个特定物品后进入无敌状态,然后在10秒后恢复正常。或者是对站在火里的玩家每秒施加一定伤害。无论哪种情况都可以通过计时器实现。
实现指南
本指南介绍了如何在蓝图中使用 Timers 实现游戏目的,以及与 Timer 相关的节点。
创建和清除计时器
以下步骤将向你介绍如何在蓝图中创建/设置计时器。
在本示例中,我们将使用 Blueprint Third Person Template 并对玩家随时间造成火焰伤害。
在你的项目中,打开 ThirdPersonCharacter 蓝图。
在图表中 Right-click 并添加两个 Custom Events,分别叫做 PlayerInFire 和 PlayerNotInFire。
在 MyBlueprint 窗口中,添加一个新的 Function,取名为 FireDamage。
此函数将被 Timer 随时间调用并施加伤害。
拖开 PlayerInFire 事件并添加 Set Timer 节点。
拖开 PlayerNotInFire 事件并添加 Clear Timer 节点。
对于 Set Timer 和 Clear Timer,需要将 Function Name 设置为 FireDamage。
在 Set Timer 上,将 Time 设置为 0.75 并选中 Looping 选框。
将 Set Timer by Function Name 节点的 Return Value 引脚连到 Clear Timer by Handle 节点的 Handle 引脚。
输入的 Time 就是调用 Function Name 函数的间隔时间(间隔0.75秒)。
新建一个名为 PlayerHealth 的 Int 变量,点击 Compile,然后将 Default Value 设置为 100。
在 FireDamage 函数内,按住 Alt 键,同时将 PlayerHealth 变量拖入到图表。
按住 Control 并拖入 PlayerHealth 变量。
拖开 PlayerHealth 变量并添加一个 Integer - Integer 节点,然后拖出0针并添加一个 Random Integer in Range 节点。
我们使用了一个带有最小值(1)和最大值(4)的**Random Integer in Range**节点,但你也可以随意输入一个伤害值。
从 Set 节点连出来,添加一个 Print String,然后按住 Control 并拖入 PlayerHealth,将其连接至 Print String。
在本示例中,我们没有显示生命条;但以上设置将让我们看到生命值其实正在下降。
打开 Blueprint_Effect_Fire 蓝图,然后单击 Components 选项卡。
单击 Add Component 按钮并添加一个 Box 形状,将其命名为 Trigger(触发器)。
当玩家进入/退出这个 Trigger 时,我们将调用 ThirdPersonCharacter 蓝图中的事件。
返回 Graph 选项卡并 Right-click 这个 Trigger,然后添加 OnComponentBegin 和 OnComponentEnd 重叠事件。
拖开其各自的 Other Actor 针并添加 Cast To ThirdPersonCharacter 节点。
拖开 As Third Person Character C 针并添加(Begin节点的)PlayerInFire 和(End节点的)PlayerIsNotInFire 事件。
Compile 并 Save,然后关闭蓝图。
在 Content Browser 中,将 Blueprint_Effect_Fire 蓝图拖入关卡。
单击 Play 按钮以便通过编辑器运行游戏,这时如果角色进入到火中,你将看到其开始受到伤害。
这个示例介绍了如何用计时器实现随时间累计伤害效果;但你也可以使用计时器呈现其他应用,例如,可以让玩家持续X秒钟所向无敌或拥有某种能力的强化道具。
其他计时器相关节点
Set Timer 和 Clear Timer 节点可用于开始/停止计时器,而下面的节点也可能满足你的其他需要。
Get Timer Elapsed 和 Get Timer Remaining
Get Timer Elapsed 和 Get Timer Remaining 节点分别用于获取指定计时器(由 FunctionName 指定)从开始后经过的时间,以及指定计时器的剩余时间。它将返回浮点值,而且可用于几种不同目的,例如,随时间改变某种效果或在效果即将失效时提供一条消息。
Pause Timer 和 Un Pause Timer
顾名思义,Pause Timer 能将计时器暂停在当前时间,而 Clear Timer 能使其完全停止并重置。Un Pause Timer 节点可用于恢复暂停的计时器并从它之前停止的地方开始。这种设定有很多实际用途,例如,当玩家被施加了一个基于计时器的效果,然后又进入了菜单或物品栏界面,而你希望暂停该效果并在他们返回游戏时将其恢复。
Timer Exists、Is Timer Active 和 Is Timer Paused
Timer Exists、Is Timer Active 和 Is Timer Paused 节点全都会返回 True 或 False 值,分别用于确定计时器是否存在、计时器当前是否激活,以及计时器当前是否暂停。
Set Timer Delegate
Set Timer Delegate 节点的作用类似于 Set Timer 节点,但前者并不指定函数名称,你可以连接一个要启动的 Custom Event。和 Set Timer 节点一样,你也可以将它设置为循环执行。要清除计时器,你可以使用 Clear Timer 节点并在函数名称中输入你的自定义事件的名称。