UE4 实现Timer \C++
0. 描述
- UE 写timer
- timer调用函数
- 符合条件清除 timer handel
1. 不带参数
1.1 头文件.h文件添加:
FTimerHandle TestHandel; //声明一个句柄
void test_timer(); //timer回调函数
void SetTimer();//调用timer
int i = 0;
1.2. 方法实现.cpp文件添加:
-
FTimerHandle 计时器句柄 对计时器进行控制
-
InTimerMethod 计时器执行时调用的函数
-
InRate 多久调用一次
-
InbLoop 是否循环
-
InFirstDelay 触发后到第一次调用函数的时间,小于0的时使用inRate。
#include "Engine/Classes/Kismet/GameplayStatics.h"
void AMyPawn::SetTimer() //设置timer的函数
{
UWorld* world = this->GetWorld();//world可能为空,所以要判断一下
if (world)
{
// 3s后执行test_timer(), 每2s执行一次
world->GetTimerManager().SetTimer(TestHandel, this, &AMyPawn::test_timer, 2.0f, true, 3.0f);
}
}
void AMyPawn::test_timer()
{
// 这里执行10次, 10次后清除timer, 这里不再执行
UE_LOG(LogTemp, Warning, TEXT("timer exec Succeed!"));
i++;
if (i>10)
{
UWorld* world = this->GetWorld();//world可能为空,所以要判断一下
if (world)
{
world->GetTimerManager().ClearTimer(TestHandel);
UE_LOG(LogTemp, Warning, TEXT("timer clear Succeed!"));
}
}
}
2. 带参数
2.1 方式1
- .h
void timer(int32 a); void Calltimer();
- .cpp
void AActor::Calltimer() { int32 a = 3; FTimerHandle UniqueHandle; FTimerDelegate RespawnDelegate = FTimerDelegate::CreateUObject(this, &AActor::timer, a); GetWorldTimerManager().SetTimer(UniqueHandle, RespawnDelegate, 3.0f, false); } void AActor::timer(int32 a) { }
2.2 方式2
- .h
void Calltimer(); UFUNCTION() void timer(int32 a);
- .cpp
void AAdapterActor::Calltimer() { FTimerHandle TimerHandle; FTimerDelegate TimerDel; int32 a = 1; //Binding the function with specific values TimerDel.BindUFunction(this, FName(TEXT("timer")), a); //Calling MyUsefulFunction after 2 seconds without looping GetWorldTimerManager().SetTimer(TimerHandle, TimerDel, 2.0f, false); } void AAdapterActor::timer(int32 a) { }