虚幻引擎 Clear and Invalidate Timer by Handle 节点

Clear and Invalidate Timer by Handle 是虚幻引擎 5 中一个非常重要的节点。它的核心作用,就是精准地停止一个正在运行的定时器,并将与之关联的句柄(Handle)设置为无效,使其可以被干净利落地重用

要掌握它,核心是理解 “定时器句柄” 这个关键。句柄就像是定时器的“身份证”,你需要创建并保存它,才能在需要时用它来找到并清除特定的定时器。

蓝图:三步搞定定时器清除

在蓝图里使用这个节点主要分三步走。

步骤一:启动一个定时器并保存它的“身份证”

  1. 在蓝图的事件图表里,找到并添加 Set Timer by Event 节点。

  2. 将节点的 Event 引脚连接到你想定时触发的自定义事件(例如,一个命名为“Do Something”的事件)。

  3. 设置好 Time 参数(触发间隔,单位是秒)和 Looping 参数(是否循环)。

  4. 最关键的一步:右键点击 Set Timer by Event 节点的 Return Value 引脚,选择 “Promote to Variable”。这会自动生成一个 Timer Handle 类型的变量,用来保存这个定时器的“身份证”。

步骤二:连接并配置清除节点

  1. 在需要停止定时器的地方,拖出 Clear and Invalidate Timer by Handle 节点。

  2. 将 Clear and Invalidate Timer by Handle 节点的 Handle 输入引脚,连接到你在上一步刚刚创建的 Timer Handle 变量

  3. 将它的执行引脚(白色线条的In)连接到触发清除操作的事件后面(比如按下键盘的“1”键事件)。

步骤三:验证与调试

执行时,在触发 Clear and Invalidate Timer by Handle 节点后,输出端(Out)会继续执行后续逻辑。一个很好的实践是紧接着连接Is Valid节点进行检查,若确认句柄无效,即可在逻辑上安全地重用该句柄来设置新定时器。

C++:更底层的控制

如果你习惯用C++,核心思想是一样的:

  • 在头文件(.h)中声明一个 FTimerHandle 变量。

  • 在实现文件(.cpp)中通过 GetWorldTimerManager().SetTimer() 设置定时器。

  • 最后,通过 GetWorldTimerManager().ClearTimer(MyTimerHandle) 来清除,并可调用 MyTimerHandle.Invalidate() 使之无效

完整案例:动态技能冷却指示器

下面通过一个“动态技能冷却指示器”的完整案例,帮你更好地理解整个过程。

场景设想:我们为角色制作一个“冲刺”技能。玩家每次按下技能键,会播放冲刺动作,然后进入3秒冷却。这3秒内角色无法再次使用,同时屏幕上的UI图标会有一个清晰的倒计时显示。

步骤1:准备工作

  1. 在角色蓝图中,创建一个名为bCanDashBoolean变量(默认true),用于表示技能是否可用。

  2. 再创建一个名为DashCooldownTimerFTimerHandle类型的变量,这是我们的“身份证”。

步骤2:蓝图实现

  1. 设置冷却定时器:在按下技能键后,检查bCanDash是否为真。若为真,则先将其设为false(禁用技能),然后触发冲刺动作。接着,按步骤一的说明,使用Set Timer by Event创建一个定时器,Time设为3.0秒,Looping设为false。

  2. 实现冷却结束逻辑:为Set Timer by EventEvent引脚创建一个新事件,这个事件的内容是将bCanDash重新设置为true

  3. 实现UI倒计时:为了更新UI,你可能需要在Event Tick事件中,利用Get Timer Remaining Time by Handle节点,不断获取当前定时器的剩余时间并传递给UI。

  4. 主动清除定时器的场景:如果角色在冷却期间被杀死并立即复活,我们希望技能立即可用。此时,在角色的死亡逻辑后,就可以连接Clear and Invalidate Timer by Handle节点,并用我们保存的DashCooldownTimer变量作为Handle输入,然后手动将bCanDash设置为true,技能冷却便被手动重置了。

关键点与避坑提醒

  • “Clear and Invalidate” vs “Clear Timer by Function Name”: 前者需要Timer Handle,更精准,不易出错,是推荐的最佳实践。后者只需提供函数名字符串,但容易因误填而导致停止错误的定时器

  • 对象的生命周期:当创建定时器的Actor被销毁时,引擎会自动清理与之关联的所有定时器。所以,如果在BeginDestroyEndPlay中手动清除Timer Handle,并非必须,但更是一种严谨的好习惯

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容