一、Retriggerable Delay 节点概述
1.1 官方定义
Retriggerable Delay(可重置延迟)是一个潜伏动作节点,按照指定的时间(秒)执行延迟动作。关键特性:如果在倒计时结束前再次调用该节点,倒计时将被重置为完整的 Duration 时长,从头开始计时。
1.2 节点引脚说明
| 引脚类型 | 引脚名称 | 说明 |
|---|---|---|
| 输入 | In(执行引脚) |
启动延迟倒计时 |
| 输入 | Duration(浮点数) |
延迟时长,单位秒 |
| 输出 | Completed(执行引脚) |
延迟倒计时完成后执行 |
1.3 与普通 Delay 节点的核心区别
这是理解 Retriggerable Delay 最关键的一点:
| 行为场景 | Delay 节点 | Retriggerable Delay 节点 |
|---|---|---|
| 单次触发 | 等待指定秒数后执行 | 等待指定秒数后执行 |
| 倒计时中再次触发 | 忽略,不影响已有计时 | 重置计时器,从头开始倒计时 |
| 连续频繁触发 | 每次倒计时结束后各执行一次 | 只有最后一次触发后等待完整时长才执行 |
通俗理解:Delay 就像”定了闹钟后不管你怎么按,到点就响”;Retriggerable Delay 就像”每次按它都重新计时,必须安静等待完整时长才会响”。
举例:设置 Duration = 2 秒,在 2 秒内连续触发 3 次——
-
使用 Delay:2 秒后执行 3 次;
-
使用 Retriggerable Delay:每次触发都重置计时器,只有最后一次触发后 2 秒内没有再触发,才会执行 1 次。
二、完整使用案例
以下提供两个典型案例,包含从创建蓝图到测试运行的完整操作步骤。
案例一:可重置技能冷却系统
场景描述:玩家按下技能键后,进入 5 秒冷却。如果在冷却期间再次按下技能键,冷却时间重置为 5 秒,防止技能被滥用。
核心思路:利用 Retriggerable Delay 的”重置”特性——玩家连续按技能键时,计时器不断重置,只有持续不再按技能键超过 5 秒,才能再次使用技能。
完整操作步骤
步骤 1:创建角色蓝图(如果还没有)
-
在内容浏览器中右键点击 → 蓝图类 → 选择 Character 类
-
命名为
BP_MyCharacter -
双击打开蓝图编辑器
步骤 2:创建技能输入事件
-
在蓝图编辑器工具栏点击 Class Settings(类设置)
-
在右侧 Details 面板找到 Input 分类
-
点击 + 添加一个 Action Mapping(动作映射),命名为
UseAbility -
按提示分配一个按键(如数字键 1、空格键或 Q 键)
*如果项目中已有输入映射配置,也可以直接在 Event Graph 中右键搜索 InputAction UseAbility 使用已有事件。
步骤 3:添加用于冷却判断的布尔变量
-
在左侧 My Blueprint 面板点击 Variables 旁边的 + 号
-
新建变量命名为
bIsOnCooldown -
变量类型设置为 Boolean
-
将该变量的默认值保持为
false
步骤 4:构建冷却检查逻辑
在事件图表中,按以下顺序连接节点:
-
从
InputAction UseAbility事件引出执行线 -
添加 Branch(分支)节点,将
bIsOnCooldown变量拖入 Condition 输入端-
False 执行链:技能可以使用 → 进入释放技能的逻辑
-
True 执行链:技能冷却中 → 无任何操作(或可选播放”技能冷却中”的提示音)
-
步骤 5:释放技能并启动冷却(核心部分)
在 Branch 的 False 执行链上连接以下节点:
-
技能释放逻辑(可以是打印字符串、生成特效、播放动画等)
-
设置
bIsOnCooldown = True:从Set bIsOnCooldown节点引线,启用”Set”功能 -
添加 Retriggerable Delay 节点:
-
Duration 输入端连接一个浮点数,数值为冷却时间,例如
5.0
-
-
从 Retriggerable Delay 的 Completed 输出引脚引线
-
设置
bIsOnCooldown = False:添加 Set 节点,将bIsOnCooldown设置回 False
步骤 6:编译并测试
-
点击工具栏 Compile 按钮
-
点击 Play 运行游戏
-
按技能键:
-
第一次按下:执行技能,bIsOnCooldown 变为 True,启动 5 秒冷却倒计时
-
5 秒内再次按技能键:由于 bIsOnCooldown 仍为 True,Branch 拦截,技能不可用,但 Retriggerable Delay 被重置,5 秒冷却重新开始计时
-
冷却期间多次按技能:只有冷却结束后才能再次释放技能
-
💡 这正是 防抖(Debounce) 机制的核心实现,Retriggerable Delay 在计时期间如果再触发会重置计时器,直到规定时间内没有触发才算完成。
案例二:护盾/生命值自动恢复系统
场景描述:玩家受到伤害后,护盾短暂失效。如果玩家在 3 秒内未再受到伤害,则护盾自动恢复;如果在 3 秒内再次受伤,恢复计时器重置,重新等待 3 秒。
适用游戏:《使命召唤》风格的生命值恢复机制、护盾充能系统。
完整操作步骤
步骤 1:创建玩家角色蓝图和基本属性
-
创建或打开玩家角色蓝图
BP_PlayerCharacter -
创建以下变量:
-
CurrentHealth(Float,当前生命值) -
MaxHealth(Float,最大生命值,设置为 100.0) -
HealthRegenRate(Float,恢复速率,设置为 10.0 生命值/秒) -
RegenDelayDuration(Float,恢复延迟时长,设置为 3.0 秒) -
bIsRegenerating(Boolean,默认为 False,标记恢复是否进行中) -
RegenTimer(Float,标记恢复计时器剩余时间,可选,用于显示 UI)
-
步骤 2:创建伤害事件函数
-
创建一个自定义事件,命名为
ApplyDamage -
添加一个输入参数:
DamageAmount(Float) -
事件逻辑:
-
获取并更新 CurrentHealth(减去伤害值)
-
添加分支节点:
bIsRegenerating == True时进入重置恢复逻辑 -
添加自定义函数
StartHealthRegenDelay作为恢复启动入口
-
步骤 3:启动健康恢复延迟计时(核心部分)
创建自定义函数或直接在图表中实现:
-
如果恢复已在进行:使用 Retriggerable Delay 重置计时器
-
如果恢复未开始:设置
bIsRegenerating = True,然后启动 Retriggerable Delay -
Retriggerable Delay 设置 Duration = 3.0 秒
步骤 4:恢复结束后执行生命恢复
从 Retriggerable Delay 的 Completed 引脚引线:
-
进入 While Loop 或使用 Timeline 节点实现持续恢复
-
逐步恢复生命值直到 MaxHealth
-
恢复完成后设置
bIsRegenerating = False
步骤 5:编译并测试
-
点击 Compile 编译蓝图
-
添加打印字符串节点便于观察效果
-
运行游戏并测试:受到伤害后,3 秒内未再受伤则开始恢复;3 秒内再次受伤则 3 秒倒计时重置
💡 这是 Retriggerable Delay 的经典应用场景。当受伤后,在恢复延迟时间结束前如果再次受伤,计时器会被重置,确保护盾/生命值只在玩家停止受伤一段时间后才开始恢复。
参考逻辑示意:
ApplyDamage 事件
↓
Damage taken → Pause Timer → 启动 Retriggerable Delay → Unpause Timer[reference:11]
↓(如果倒计时中被再次触发)
Retriggerable Delay 自动重置倒计时
↓(倒计时完成)
Completed 引脚执行 → 开始生命/护盾恢复逻辑
三、常见应用场景总结
| 应用场景 | 具体说明 |
|---|---|
| 技能冷却重置 | 连续按技能键时不断重置冷却计时,必须持续不按超过冷却时间才可使用 |
| 生命值/护盾自动恢复 | 玩家停止受伤一段时间后自动恢复生命,再次受伤则重置计时器 |
| 按钮防抖(Debounce) | 防止用户在短时间内连续按下按钮而触发多次逻辑 |
| 延迟执行链/循环 | 可以实现比 Event Tick 效率更高的定时循环逻辑,适合需要固定间隔重复执行的场景 |
| 敌人响应延迟 | 敌人发现玩家后延迟响应,期间若玩家离开视野则重置延迟 |
| 动画状态延迟重置 | 动画播放完成后延迟重置状态,若重置前再次触发动作则重置计时 |
四、重要注意事项
-
Retriggerable Delay 只能被最后一个触发器的逻辑调用:如果在延迟计时期间被多次触发,旧逻辑将被丢弃,只有最后一次触发才有效。
-
不要在 Tick 事件中直接使用 Retriggerable Delay:每帧都会触发重置,导致 Completed 永远不会执行。
-
Duration 数值设定:建议根据实际需求设定合适的时长,过短可能导致逻辑判断过于灵敏,过长则影响游戏体验。
-
防止无限循环:在 Completed 执行链中调用相同的输入事件前,确保使用了条件分支(如 Branch)检查状态,避免逻辑死循环。
-
Retriggerable Delay vs 普通 Timer:如果需要更精确的计时器控制和中断功能,可以使用 Event Tick + 变量计时器,但 Retriggerable Delay 更简洁,适合常规的需求场景。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容