虚幻引擎 Delay 节点

虚幻引擎5蓝图中的 Delay 节点是一个非常实用的工具,它能在不冻结整个游戏的情况下,让程序“等待”一段指定的时间后,再继续执行后续逻辑

前置知识Delay 节点属于蓝图中的“潜伏节点”。它会暂停所在图表的执行流,但不阻塞游戏的主线程,主线程仍会继续渲染画面、处理物理和输入事件

📦 案例一:角色动态缓冲期(使用标准Delay)

通过标准Delay实现角色拾取物品后短暂无敌,配合For Loop实现多次尝试,掌握普通延迟特性。

  • 操作流程

    1. 创建变量bIsInvincible(Boolean),默认false

    2. 蓝图连接(按键拾取物品时触发):

    3. 实现流程:设置无敌为True → 开始无敌Delay → 无敌结束设置无敌为False

    4. 动态尝试:在延迟期间,再次尝试激活无敌会被忽略。用For Loop(设置Loop Count=3)配合Print String可演示,延迟期内循环会立即执行完毕,输出多次而非分三次输出

🔁 案例二:连锁反应与重复触发(使用Retriggerable Delay)

实现当玩家持续停留在“压力板”上时,危险物可重置倒计时的连锁反应。

  • 节点对比Delay在倒计时中再次触发会被忽略,而RetriggerableDelay再次触发则会重置倒计时为完整时间

  • 应用场景:玩家站上压力板开始3秒倒计时,移动但未离开压力板时,倒计时立刻重置到3秒。创建RetriggerableDelay并设置3秒,连接Event Tick每帧打印重置即可。

确保代码稳定:使用技巧与常见陷阱

  1. 延迟函数:不能将Delay节点直接放在自定义函数中。因为函数内部的执行是瞬间完成的。如果必须使用,需将函数改为“实现事件”

  2. 延迟循环Delay节点不能直接在For LoopWhile Loop中按预期工作,整个循环会瞬间完成,然后只等待一次

  3. 谨慎使用于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节点和计时器各有用武之地。

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容