[UE4] 타이머 매니저 (Timer Manager)
게임 플레이 타이머
설정된 주기마다 동작을 수행하는 타이머 구조체이다. 딜레이 이후 또는 일정 시간에 걸쳐 동작을 수행하도록 스케쥴을 잡아 수행할 수 있다.
타이머 관리
타이머는 글로벌 타이머 매니저(FTimerManager)에서 관리하며 게임 인스턴스 오브젝트와 각 월드에 존재한다. 타이머를 셋업하는 데 사용되는 함수는 'SetTimer'와 'SetTimerForNextTick'이 있다. 만약 타이머를 호출한 오브젝트가 타이머의 시간이 만료되기 전에 소멸할 경우 타이머는 자동으로 취소가 된다.
설정 및 해제
FTimerManager의 SetTimer 함수는 딜레이 후 함수나 델리게이트를 호출하는 타이머를 설정하며, 이 함수는 TimerHandle을 채우고 카운트 다운, 일시정지, 남은 시간 확인 및 변경, 최소하는데 사용 가능하다. SetTimerForNextTick 함수는 다음 프레임에 실행되도록 설정이 가능하며, 타이머 핸들을 채우지 않는다. 그리고 SetTimer를 통하여 채워진 TimerHandle은 ClearTimer 함수를 통하여 해제할 수 있으며, 이 상태에서 새로운 타이머로 재사용 가능하다. 해제가 되지 않은 기존 핸들에 SetTimer를 호출 하면 기존 것을 해제하고 새로운 것을 대체한다. 마지막으로 특정 오브젝트에 연관된 모든 타이머를 해제하기 위해서는 ClearAllTimerForObject 함수를 호출하여 해제 가능하다.
FTimerHandle repeatHandler;
// SetTimer(핸들러, 함수, 일정 시간, 반복할건가?, 일정 간격)
GetWorldTimerManager().SetTimer(repeatHandler, this, &Class::RepeatFunction, 1.0f, true, 10.0f);
// 반복 함수를 초당 1.0회로 10.0f 초간 호출한다.
GetWorldTimerManager().ClearAllTimersForObject();
// 해당 오브젝트에 호출된 타이머를 해제시킨다.
* SetTimer를 0 이하의 속도로 호출하는 것은 ClearTimer를 호출하는 것과 같다.
Delay 함수 구현
블루프린트에는 Delay 함수가 있지만 c++ 환경에서는 TimerManager를 이용하여 구현할 수 있다.
FTimerHandle delayTimerHandle;
float delayTime = 10.f;
GetWorld()->GetTimerManager().SetTimer(delayTimerHandle, FTimerDelegate::CreateLamda([&]()
{
// Delay 후 사용될 코드
// TimerHandle 초기화
GetWorld()->GetTimerManager().ClearTimer(delayTimerHandle);
}), delayTime, false);
FTimerManager를 이용하여 일정 시간 동안 동작을 할 수 있는 스케쥴을 작성할 수 있는 기능을 알아보았다. 해당 기능 설정을 했을때 해제를 잘하여 사용하는 것을 주의하자!
'Game Programming > UE4' 카테고리의 다른 글
[UE4] BindWidget (0) | 2023.10.28 |
---|---|
[UE4] Smart Pointer (0) | 2023.10.21 |
[UE4] Delegate (0) | 2023.09.17 |
[UE4] TMap (0) | 2023.09.09 |
[UE4] TArray (0) | 2023.09.02 |