[UE4]Timer的簡單使用

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 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章