虚幻引擎5蓝图中的 Delay 节点是一个非常实用的工具,它能在不冻结整个游戏的情况下,让程序“等待”一段指定的时间后,再继续执行后续逻辑。
前置知识:
Delay节点属于蓝图中的“潜伏节点”。它会暂停所在图表的执行流,但不阻塞游戏的主线程,主线程仍会继续渲染画面、处理物理和输入事件。
📦 案例一:角色动态缓冲期(使用标准Delay)
通过标准Delay实现角色拾取物品后短暂无敌,配合For Loop实现多次尝试,掌握普通延迟特性。
-
操作流程:
-
创建变量:
bIsInvincible(Boolean),默认false。 -
蓝图连接(按键拾取物品时触发):
-
实现流程:设置无敌为
True→ 开始无敌Delay → 无敌结束设置无敌为False。 -
动态尝试:在延迟期间,再次尝试激活无敌会被忽略。用
For Loop(设置Loop Count=3)配合Print String可演示,延迟期内循环会立即执行完毕,输出多次而非分三次输出。
-
🔁 案例二:连锁反应与重复触发(使用Retriggerable Delay)
实现当玩家持续停留在“压力板”上时,危险物可重置倒计时的连锁反应。
-
节点对比:
Delay在倒计时中再次触发会被忽略,而RetriggerableDelay再次触发则会重置倒计时为完整时间。 -
应用场景:玩家站上压力板开始3秒倒计时,移动但未离开压力板时,倒计时立刻重置到3秒。创建
RetriggerableDelay并设置3秒,连接Event Tick每帧打印重置即可。
确保代码稳定:使用技巧与常见陷阱
-
延迟函数:不能将
Delay节点直接放在自定义函数中。因为函数内部的执行是瞬间完成的。如果必须使用,需将函数改为“实现事件”。 -
延迟循环:
Delay节点不能直接在For Loop或While Loop中按预期工作,整个循环会瞬间完成,然后只等待一次。 -
谨慎使用于Tick:避免在
Event Tick事件中直接使用Delay节点,会因触发时序错乱而导致不稳定行为。
⚠️ 注意:UE5中的“延迟0秒”
在UE5中,将Delay节点的时长设为0秒,不代表“不等待”。它的真实意思是“下一帧再执行”。这在处理某些初始化问题时特别有用,比如给物理系统(Chaos)一帧的初始化时间,以确保Add Impulse等操作能成功执行。
🤔 Delay的局限性及替代方案
虽然Delay节点很方便,但在复杂游戏逻辑中需要谨慎使用,它能阻塞蓝图执行流,导致响应性差、调试困难和无法在动画等关键动作未完成时及时响应中断请求(如角色受伤后应立即停止后摇)。
当需要更可靠、灵活的延迟或循环任务时,官方推荐使用计时器(Timer)。
-
Set Timer by Event:延迟后执行新事件。 -
Set Timer by Function Name:延迟后执行指定函数(对纯C++开发更友好)。 -
Set Timer by Event (Looping):按固定时间间隔重复执行,实现周期性行为。
💎 总结:快速决策表
| 功能 | 标准 Delay | Retriggerable Delay | 计时器 (Timers) |
|---|---|---|---|
| 核心行为 | 延迟后执行一次,期间忽略新调用 | 延迟后执行一次,期间新调用会重置计时 | 延迟/间隔执行事件/函数 |
| 动态控制 | 开始后无法中断 | 开始后无法中断(除非被重置) | 可用Timer Handle暂停、恢复或取消 |
| 典型用例 | 一次性等待 | 需要重复触发来延时的场景 | 动态延迟、循环任务、需要管理的任务 |
| 主要局限 | 无法手动取消,不适用于循环 | 无法手动取消,不适用于循环 | 需管理句柄,不能直接“堵塞”流程 |
从简单的等待到需要精细控制的逻辑,Delay节点和计时器各有用武之地。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容