익명 타이머
{
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에서 해제된다.
'게임 엔진 > Unreal' 카테고리의 다른 글
[Unreal] 테이블 데이터 이용 방법 (DataTable) (0) | 2020.12.30 |
---|---|
[Unreal] [Example] Delegate 사용방법 (1) | 2020.12.29 |
[Unreal] [Example] C++에서 Blueprint 호출, Blueprint에서 C++ 호출 (0) | 2020.11.16 |
[Unreal] 인공지능 에이전트 개발 방법 (AIController, BehaviorTree, Blackboard, Decorator, Service, Task) (0) | 2020.10.22 |
[Unreal] 프로퍼티 관련 예제 (0) | 2020.10.08 |