0. 설명
참고 : 게임플레이 타이머
아래 코드에서는 전반적인 타이머를 사용법을 보여주고 있다.
UWorld::GetTimerManager() 함수는 다음과 같다.
// Runtime/Engine/Classes/Engine/World.h
/** Gameplay timers. */
class FTimerManager* TimerManager;
inline FTimerManager& GetTimerManager() const
{
// GameInstance가 있으면 GameInstance의 TimerManager를 반환하고,
// 그렇지 않다면, 자신의 TimerManager를 돌려준다
return (OwningGameInstance ? OwningGameInstance->GetTimerManager() : *TimerManager);
}
참고로, FTimerManager는 Runtime/Engine/Public/TimerManager.h에 선언되어 있다.
1. Code
///////////////////////////////////////////////////////////////////////////////////////////////
// Header
///////////////////////////////////////////////////////////////////////////////////////////////
// Declare TimerHandle
FTimerHandle ObjectCheckTimer;
///////////////////////////////////////////////////////////////////////////////////////////////
// Cpp
///////////////////////////////////////////////////////////////////////////////////////////////
if (UWorld* world = GetWorld())
{
// UABGameInstance::CheckUObjectAlive 콜백 함수를
// 최초 1회엔 5초 뒤에, 그 다음부턴 매 1초마다 수행되게 하는 타이머 등록
world->GetTimerManager().SetTimer(
ObjectCheckTimer, // TimerHandle
this, // FTimerDelegate 델리게이트 수행 객체
&UABGameInstance::CheckUObjectAlive, // FTimerDelegate (TimerManager.h 확인)
1.0f, // Interval
true, // 반복 여부 (false : 1회만)
5.0f // 최초 Interval, 이것이 0이면 Interval이 사용됨
);
}
void UABGameInstance::CheckUObjectAlive()
{
if (UWorld* world = GetWorld())
{
// World의 TimerManager를 얻어
FTimerManager& timerManager = world->GetTimerManager();
// 이전 콜백과 지금 콜백간의 실제 간격 시간 구하기 (지정한 interval 대비 오차 추적시 사용)
float lifetime = timerManager.GetTimerElapsed(ObjectCheckTimer);
// 타이머 해제
timerManager.ClearTimer(ObjectCheckTimer);
}
}
'UE4' 카테고리의 다른 글
[UE4] ConstructorHelper::FObjectFinder/FClassFinder (0) | 2023.04.24 |
---|---|
[UE4] Asset 비동기 로딩 (FStreamableManager::RequestAsyncLoad) (0) | 2023.04.24 |
[UE4] World 내 Object/Actor 순회 (0) | 2023.04.24 |
[UE4] MyLogMacro.h (0) | 2023.04.24 |
[UE4] 프로퍼티 및 UPROPERTY 주요 지정자 (0) | 2023.04.24 |