【UE4 C++】定时器 Timer 与事件绑定
概念
- 定时执行操作,可执行一次,或循环执行直到手动终止
- 定时器在全局定时器管理器(FTimerManager 类型)中管理。全局定时器管理器存在于 游戏实例 对象上以及每个 场景 中
- 定时器需要绑定委托或函数,作为执行体。这些函数将填充 FTimerHandle 定时器句柄
- FTimerHandle 支持 暂停、恢复倒计时;查询或更改剩余时间;取消定时器
- 设置定时器的函数
- SetTimer 定时执行
- SetTimerForNextTick 下一帧执行
- 使用案例
- 定时 SpawnActor
- 定时销毁
- buff持续,如霸体、持续伤害
设置定时器
-
SetTimer
方法 -
支持 FTimerDelegate 委托,可以扩展使用 Lambda 表达式,可以带参数
-
GetWorldTimerManager()
等价于GetWorld()->GetTimerManager()
template<class UserClass> void SetTimer ( FTimerHandle & InOutHandle, UserClass * InObj, typename FTimerDelegate::TUObjectMethodDelegate_Const< UserClass >::FMethodPtr InTimerMethod, float InRate, bool InbLoop, float InFirstDelay )
-
代码实现
FTimerHandle SpawnerHandle; GetWorldTimerManager().SetTimer(SpawnerHandle, this, &AEnenmySpawner::SpawnEnemy, 5.0f, true); void AEnenmySpawner::SpawnEnemy() { GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Red, "Spawn"); }
清空定时器
-
ClearTimer
-
ClearAllTimersForObject
清空与特定对象关联的所有定时器GetWorldTimerManager().ClearTimer(SpawnerHandle); // 参数传入一个对象,本例以 this 举例 GetWorldTimerManagerr().ClearAllTimersForObject(this);
暂停和恢复
-
PauseTimer
-
UnPauseTimer
GetWorldTimerManager().PauseTimer(SpawnerHandle); GetWorldTimerManager().UnPauseTimer(SpawnerHandle); GetWorldTimerManager().IsTimerPaused(SpawnerHandle);
判断是否活跃且未暂停
-
IsTimerActive
GetWorldTimerManager().IsTimerActive(SpawnerHandle);
获取定时器速率
-
GetTimerRate
句柄若无效,返回-1GetWorldTimerManager().GetTimerRate(SpawnerHandle);
获取经过时间和剩余时间
-
GetTimerElapsed
句柄若无效,返回-1 -
GetTimerRemaining
句柄若无效,返回-1GetWorldTimerManager().GetTimerElapsed(SpawnerHandle); GetWorldTimerManager().GetTimerRemaining(SpawnerHandle);
参考
作者:砥才人
出处:https://www.cnblogs.com/shiroe
本系列文章为笔者整理原创,只发表在博客园上,欢迎分享本文链接,如需转载,请注明出处!