網上有人推薦說使用 FPlatformProcess::Sleep(1.0f);
其實使用這種方法會導緻整個程式被延遲,并不是我們想要的。
1、在BindLambda中使用FTimerDelegate
FTimerDelegate TimerDelegate;
TimerDelegate.BindLambda([&]
{
UE_LOG(LogTemp, Warning, TEXT("This text will appear in the console 3 seconds after execution"))
});
FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, TimerDelegate, 3, false);
2. 隻使用FTimerHandle
FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, [&]()
{
UE_LOG(LogTemp, Warning, TEXT("This text will appear in the console 3 seconds after execution"))
}, 3, false);
1、如果沒有輸入參數
FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &UObject::MethodWithDelay, 3, false);
2、如果有輸入參數
int32 ParameterToPass = 100; // You can use any supported variable type
FTimerHandle TimerHandle;
FTimerDelegate TimerDelegate = FTimerDelegate::CreateUObject(this, &UObject::MethodWithDelay, ParameterToPass);
GetWorld()->GetTimerManager().SetTimer(TimerHandle, TimerDelegate, 3, false);