概念
- 定時執行操作,可執行一次,或循環執行直到手動終止
- 定時器在全局定時器管理器(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);