1、使用到的頭文件
#include "TimerManager.h"
1
2、用法
定義一個FTimerHandle成員變量,在定義一個print函數,用來在控制檯輸出
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "TimerTest.generated.h"
UCLASS()
class INPUTTEST_API ATimerTest : public AActor
{
GENERATED_BODY()
public:
ATimerTest();
protected:
virtual void BeginPlay() override;
public:
FTimerHandle Timer;
void print();
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
接着我們在BeginPlay函數中,設置timer
#include "TimerTest.h"
#include "TimerManager.h"
ATimerTest::ATimerTest()
{
PrimaryActorTick.bCanEverTick = false;
}
void ATimerTest::BeginPlay()
{
Super::BeginPlay();
GetWorldTimerManager().SetTimer(Timer, this, &ATimerTest::print, 0.5f, true,10.0f);
}
void ATimerTest::print()
{
UE_LOG(LogTemp, Warning, TEXT("print"));
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
關鍵是這句話
GetWorldTimerManager().SetTimer(Timer, this, &ATimerTest::print, 0.5f, true,10.0f);
1
我們仔細解釋一下,GetWorldTimerManager()返回一個FTimerManager對象,用這個對象可以管理我們的timer,接着SetTimer函數設置計時器,以下是函數原型,當然還有一些重載,沒有這麼多參數詳細的查閱API文檔,下面這個原型是參數最多的。
template<class UserClass>
void SetTimer
(
FTimerHandle & InOutHandle,
UserClass * InObj,
typename FTimerDelegate::TUObjectMethodDelegate< UserClass >::FMethodPtr InTimerMethod,
float InRate,
bool InbLoop,
float InFirstDelay
)
1
2
3
4
5
6
7
8
9
10
InOutHandle 是我們要設置的計時器
UserClass 調用timer函數的object
InTimerMethod timer會重複執行的方法
InRate 調用頻率把,例如填0.5f的話,那麼InTimerMethod就會每隔0.5f調用一次
InbLoop 是否循環,如果是false的那麼方法只會執行一次
InFirstDelay 第一次調用之前延時的時間,例如5.0f,那麼過5秒後,方法才執行,然後才根據InRate 正常調用。
如果要關掉timer的話,使用ClearTimer方法,原型如下
void ClearTimer
(
FTimerHandle & InHandle
)
1
2
3
4
在TimerManager中還有很多關於Timer的方法,可查閱API文檔來使用
3、測試
編譯、運行
---------------------
作者:芒果和小貓
來源:CSDN
原文:https://blog.csdn.net/wayway0554/article/details/81264673
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!