언리얼 엔진 메모장

FTimerHandle / FTimerManager

lgbl 2025. 3. 6. 09:24

  FTimerHandle은 언리얼 엔진에서 시간 기반 작업을 예약하고 관리하는 도구이다. 보통 특정 시간이 지난 후 함수를 실행하거나, 일정 간격으로 반복 실행할 때 사용된다. 동작은 FTimerManager를 통해 동작한다.

 

 

역할
FTimerHandle FTimerManager
타이머 제어를 위한 핸들(참조값) 역할 모든 타이머를 관리하는 역할
시간 측정이 아닌
FTimerManager의 등록된 타이머를 가리킴
내부적 등록된 타이머들을 리스트에 저장,
프레임 단위로 재확인
FTimerHandle를 사용해 특정 타이머를 멈출 수 있음 시간이 지나면 함수를 실행, 반복 실행일 경우 재등록

FTimerHandle은 반드시 클래스 멤버 변수로 선언해야함

 

  • 사용법
FTimerHandle MyTimerHandle;

void StartTimer()
{
    GetWorld()->GetTimerManager().SetTimer(
        MyTimerHandle,      // 타이머 핸들
        this,               // 현재 객체 (AMyActor)
        &AMyActor::MyFunction, // 실행할 함수
        2.0f,               // 2초 후 실행
        false               // 반복 실행 여부 (false: 한 번만 실행)
    );
}

void MyFunction()
{
    UE_LOG(LogTemp, Warning, TEXT("타이머 실행됨!"));
}

//StartTimer()를 호출하면 2초 후 MyFunction()이 실행되며 반복이 꺼져있어 한 번만 실행됨
//false를 true로 바꾸게 되면 2초마다 MyFunction()이 실행됨

//----------------------------------------------------------------
FTimerHandle RepeatTimerHandle;

void StopTimer()
{
    GetWorld()->GetTimerManager().ClearTimer(RepeatTimerHandle);
}

void CheckTimer()
{
    if (GetWorld()->GetTimerManager().IsTimerActive(RepeatTimerHandle))
    {
        UE_LOG(LogTemp, Warning, TEXT("타이머가 실행 중!"));
    }
    else
    {
        UE_LOG(LogTemp, Warning, TEXT("타이머가 멈춰 있음."));
    }
}

//ClearTimer()를 사용하면 타이머를 멈추고 초기화 된다.
//IsTimerActive()로 타이머가 현재 작동중인지 확인 가능하다.

 

 

  타이머를 멈출 필요가 없거나 한 번만 실행되는 타이머일 때는 FTimerHandle 없이 SetTimer()를 사용할 수 있다. 이렇게 코드를 짜게 되면 타이머를 관리 할 필요 없이 2초 후에 실행되고 자동으로 제거된다.

GetWorld()->GetTimerManager().SetTimer(
    FTimerHandle(), 
    this,
    &AMyActor::MyFunction, 
    2.0f, 
    false
);

 

 

주의할 점으로는 ClearTimer()를 하지 않으면 타이머가 계속 실행될 수 있으며 이 경우 크래시가 발생할 가능성이 있다.

void AMyActor::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
    GetWorld()->GetTimerManager().ClearTimer(RepeatTimerHandle);
}

EndPlay() 같은 함수에서 ClearTimer()를 호출하여 객체가 파괴될 때 타이머를 정리할 수 있다.

'언리얼 엔진 메모장' 카테고리의 다른 글

UE_LOG  (0) 2025.03.05
TWeakObjectPtr  (0) 2025.03.04
UPROPERTY & UFUNCTION  (0) 2025.02.28