게임 엔진/Unreal
[Unreal] [Example] 타이머 이용 방법 (Timer)
AlgorFati
2020. 12. 15. 20:55
익명 타이머
{
FTimerHandle UnusedHandle;
float Duration = 0.1f;
bool bLoop = false;
GetWorldTimerManager().SetTimer(
UnusedHandle, this, &ClassName::FunctionName, Duration, bLoop);
}
람다를 이용한 등록
{
FTimerHandle TimerHandle;
FTimerDelegate TimerCallback;
TimerCallback.BindLambda(
[this, FaceId]
{
// ..
});
World->GetTimerManager().SetTimer(TimerHandle, TimerCallback, 1.0f, false);
}
타이머 등록/제거
FTimerHandle은 타이머를 구별하는 id 정도로 생각해도 좋다.
// header
FTimerHandle TimerHandle;
// source
void TestActor::RegisterTimer()
{
GetWorld()->GetTimerManager().SetTimer(
TimerHandle, this, &TestActor::OnTimerTick, 0.016f, true);
}
void TestActor::RemoveTimer()
{
GetWorld()->GetTimerManager().ClearTimer(TimerHandle);
}
Kismet 타이머
{
float Duration = 1.0f
bool bLoop = true;
UKismetSystemLibrary::K2_SetTimer(this, FString(TEXT("FunctionName")), Duration, bLoop);
}
타이머의 붙은 객체에 파괴에 대한 걱정
다음과 같은 상황을 가정해보자.
한 Actor가 있고 이 액터는 GetWorld()->GetTimerManager()를 통해 SetTimer를 하였다.
그리고 중간에 Actor가 파괴된다면, 이 타이머는 어떻게 될까?
SetTimer시에 bLoop를 false로 한다면 Duration이 끝날 때 타이머는 TimerManager에서 해제된다.
그리고 bLoop에 관계없이 Actor가 파괴되면 TimerManager에서 해제된다.