UE4Gameplay定时器
参考
定时器在全局定时器管理器(FTimerManager类)中管理,对于每个实例Uobject和场景都会有全局定时器管理器,一般来说通过SetTimer和SetTimerForNextTick来设置定时器。SetTimer具有loop属性。
访问使用定时器
AActor类对象:直接使用GetWorldTimerManager()函数,AActor::GetWorldTimerManager()相当于在UWorld中调用GetTimerManager()函数。
使用全局定时器管理器:UGameInstance::GameTimerManager(),全局管理器可以用于与任何特定场景的存在没有相关性或依赖性的函数调用
设置和清空定时器
FTimerManager类中的SetTimer函数可以将定时器设置为在一段时间后调用函数或委托,也可以设置对函数的Loop。需要注意的是在这些被调用的函数或者委托的定义中需要添加定时器句柄(FTimerHandle类)需要在头文件声明。定时器句柄主要用于暂停(或恢复)倒计时,查询或更改剩余时间,以及取消定时器。
还可以通过直接设置定时器在下一帧运行:SetTimerForNextTick,该方法不需要使用定时器句柄。
清空定时器的方法:将FTimerHandle类变量传入FTimerManager函数的ClearTimer中,使得句柄对该定时器失效,并且可以使用其去管理其他定时器。清空操作需要在被调用函数或者委托中进行。
如果想清空与特定对象关联的所有定时器可以通过ClearAllTimersForObject方法。
以小于等于0的速率调用SetTimer
等效于调用ClearTimer
//.h
FTimerHandle MemberTimerHandle;
//.cpp
void AMyActor::BeginPlay()
{
Super::BeginPlay();
// 从现在开始两秒后,每秒调用一次RepeatingFunction。
GetWorldTimerManager().SetTimer(MemberTimerHandle, this, &AMyActor::RepeatingFunction, 1.0f, true, 2.0f);
}
void AMyActor::RepeatingFunction()
{
// 调用该函数达到足够次数后,清空定时器。
if (--RepeatingCallsRemaining <= 0)
{
GetWorldTimerManager().ClearTimer(MemberTimerHandle);
// MemberTimerHandle现在可以复用于其他任意定时器。
}
// 在此进行一些操作...
}
暂停和恢复定时器
PauseTimer:定时器句柄来暂停正在运行的定时器。这样可阻止定时器执行其函数调用,但经过的时间和剩余时间将保持暂停时的状态
UnPauseTimer:将某个暂停的定时器恢复
定时器信息
FTimerManager类定时器管理器可以用于获取某个定时器的信息(速率,经过的时间和剩余时间)
- IsTimerActive:判断该定时器是否活跃且没有被暂停
- GetTimerRate:根据定时器句柄获取定时器的当前速率(两次激活时间间隔),如果句柄无效,返回-1
- GetTimerElapsed和GetTimerRemaing:同样需要一个定时器句柄,返回经过时间和剩余时间,如果句柄无效,返回-1
定时器的经过时间和剩余时间之和应该等于定时器的速率
给回调函数传入参数
上述方法是无法对回调函数传入参数的,因为与SetTimer的函数不匹配,为了能够实现对回调函数传入参数,就需要使用到FTimerDelegate,FTimerDelegate就是这个延时的委托,和自己写的那种动态委托是一样的。而FTimerHandle是维护委托的一个变量。
而FTimerDelegate是一个可以接受负载的委托,所以可以定义一个Delegate然后绑定回调函数到该Delegate上并传入参数
float blendtime = MontageBlendOutTime;
UAnimMontage* montage = Montage;
StopMontageTimerDelegate.BindUFunction(this, FName("DelayStopMontage"), blendtime , montage);
GetWorldTimerManager().SetTimer(
StopMontageTimerHandle,
StopMontageTimerDelegate,
DelayBeforeStoppingMontage,
false
);
作者:XTG111
出处:https://www.cnblogs.com/XTG111/p/17816253.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律