Clear and Invalidate Timer by Handle 是虚幻引擎 5 中一个非常重要的节点。它的核心作用,就是精准地停止一个正在运行的定时器,并将与之关联的句柄(Handle)设置为无效,使其可以被干净利落地重用。
要掌握它,核心是理解 “定时器句柄” 这个关键。句柄就像是定时器的“身份证”,你需要创建并保存它,才能在需要时用它来找到并清除特定的定时器。
蓝图:三步搞定定时器清除
在蓝图里使用这个节点主要分三步走。
步骤一:启动一个定时器并保存它的“身份证”
-
在蓝图的事件图表里,找到并添加
Set Timer by Event节点。 -
将节点的
Event引脚连接到你想定时触发的自定义事件(例如,一个命名为“Do Something”的事件)。 -
设置好
Time参数(触发间隔,单位是秒)和Looping参数(是否循环)。 -
最关键的一步:右键点击
Set Timer by Event节点的Return Value引脚,选择 “Promote to Variable”。这会自动生成一个Timer Handle类型的变量,用来保存这个定时器的“身份证”。
步骤二:连接并配置清除节点
-
在需要停止定时器的地方,拖出
Clear and Invalidate Timer by Handle节点。 -
将
Clear and Invalidate Timer by Handle节点的Handle输入引脚,连接到你在上一步刚刚创建的Timer Handle变量。 -
将它的执行引脚(白色线条的
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:准备工作
-
在角色蓝图中,创建一个名为
bCanDash的Boolean变量(默认true),用于表示技能是否可用。 -
再创建一个名为
DashCooldownTimer的FTimerHandle类型的变量,这是我们的“身份证”。
步骤2:蓝图实现
-
设置冷却定时器:在按下技能键后,检查
bCanDash是否为真。若为真,则先将其设为false(禁用技能),然后触发冲刺动作。接着,按步骤一的说明,使用Set Timer by Event创建一个定时器,Time设为3.0秒,Looping设为false。 -
实现冷却结束逻辑:为
Set Timer by Event的Event引脚创建一个新事件,这个事件的内容是将bCanDash重新设置为true。 -
实现UI倒计时:为了更新UI,你可能需要在
Event Tick事件中,利用Get Timer Remaining Time by Handle节点,不断获取当前定时器的剩余时间并传递给UI。 -
主动清除定时器的场景:如果角色在冷却期间被杀死并立即复活,我们希望技能立即可用。此时,在角色的死亡逻辑后,就可以连接
Clear and Invalidate Timer by Handle节点,并用我们保存的DashCooldownTimer变量作为Handle输入,然后手动将bCanDash设置为true,技能冷却便被手动重置了。
关键点与避坑提醒
-
“Clear and Invalidate” vs “Clear Timer by Function Name”: 前者需要
Timer Handle,更精准,不易出错,是推荐的最佳实践。后者只需提供函数名字符串,但容易因误填而导致停止错误的定时器。 -
对象的生命周期:当创建定时器的Actor被销毁时,引擎会自动清理与之关联的所有定时器。所以,如果在
BeginDestroy或EndPlay中手动清除Timer Handle,并非必须,但更是一种严谨的好习惯。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容