본문 바로가기
프로그래밍

👨‍💻 [Unreal] 언리얼 엔진에서 FTimerManager 는 무엇이며, 어떻게 활용할 수 있나요?

by 밝음의기둥 2024. 11. 25.
반응형

👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

언리얼 엔진에서 FTimerManager 는 무엇이며, 어떻게 활용할 수 있는지 간략히 알아보았습니다.


질문 >

언리얼 엔진에서 FTimerManager 는 무엇이며, 어떻게 활용할 수 있나요?

답변 >

**FTimerManager**는 언리얼 엔진에서 타이머를 관리하기 위한 클래스입니다. 이 클래스는 게임 내에서 특정 작업을 지연 후 실행하거나, 주기적으로 반복 실행하는 데 사용됩니다. 타이머 시스템은 UWorld 클래스의 인스턴스에 포함되어 있으며, 이를 통해 타이머를 설정, 관리, 제거할 수 있습니다.

FTimerManager의 주요 특징

  1. 비동기 작업 스케줄링:
    • 특정 시간 이후 실행할 작업을 예약하거나, 일정 간격으로 반복 실행할 작업을 설정할 수 있습니다.
  2. 정확한 시간 관리:
    • FTimerManager는 게임의 **델타 타임(Delta Time)**을 고려해 타이머를 정확하게 관리합니다. 이를 통해 게임 속도에 관계없이 일관된 시간 동작을 보장합니다.
  3. 콜백 함수 실행:
    • 타이머가 만료되었을 때, 지정된 함수나 델리게이트를 호출합니다. 이를 통해 비동기 이벤트를 간단히 구현할 수 있습니다.
  4. 효율적인 관리:
    • 타이머를 설정하거나 제거할 수 있으며, 타이머의 상태(활성화 여부, 남은 시간 등)를 확인할 수 있습니다.

FTimerManager의 주요 함수

  • SetTimer:
    • 타이머를 설정하고, 특정 시간 이후 함수가 호출되도록 예약합니다.
    주요 매개변수:
    • InOutHandle: 타이머를 식별하는 핸들.
    • InObj: 호출할 함수를 소유한 객체.
    • InFunctionName: 호출할 함수의 이름.
    • InRate: 타이머 간격(초).
    • bLoop: 반복 실행 여부.
    • InFirstDelay: 첫 실행까지의 지연 시간.
void SetTimer(
    FTimerHandle& InOutHandle,
    UObject* InObj,
    FName InFunctionName,
    float InRate,
    bool bLoop = false,
    float InFirstDelay = -1.0f
);

  • ClearTimer:
    • 설정된 타이머를 제거합니다.
void ClearTimer(FTimerHandle InHandle);

  • PauseTimer / UnPauseTimer:
    • 활성화된 타이머를 일시 중지하거나 재개합니다.
  • GetTimerRemaining:
    • 타이머가 종료되기까지 남은 시간을 반환합니다.
  • IsTimerActive:
    • 특정 타이머가 활성화 상태인지 확인합니다.

활용 예시

1. 단발성 타이머 설정

void MyActor::BeginPlay()
{
    Super::BeginPlay();

    GetWorld()->GetTimerManager().SetTimer(
        TimerHandle,
        this,
        &MyActor::SpawnEnemy,
        5.0f,  // 5초 후 실행
        false  // 반복하지 않음
    );
}

  • 이 코드는 게임 시작 시 5초 후에 SpawnEnemy 함수를 호출합니다.

2. 반복 타이머 설정

void MyActor::BeginPlay()
{
    Super::BeginPlay();

    GetWorld()->GetTimerManager().SetTimer(
        TimerHandle,
        this,
        &MyActor::UpdateHealth,
        1.0f,  // 1초 간격
        true   // 반복 실행
    );
}

  • 이 코드는 1초 간격으로 UpdateHealth 함수를 반복 호출합니다.

3. 타이머 중지

void MyActor::StopTimer()
{
    if (GetWorld()->GetTimerManager().IsTimerActive(TimerHandle))
    {
        GetWorld()->GetTimerManager().ClearTimer(TimerHandle);
    }
}

  • 설정된 타이머를 제거하여 실행을 중지합니다.

활용 시 유의사항

  1. TimerHandle 관리:
    • 타이머를 설정할 때 반환된 **FTimerHandle*을 반드시 관리해야, 필요 시 타이머를 중지하거나 상태를 확인할 수 있습니다.
  2. Garbage Collection과 타이머:
    • 타이머가 호출할 객체는 가비지 컬렉션으로 파괴되지 않도록 보장해야 합니다. 예를 들어, UObject가 파괴되면 해당 타이머는 정상적으로 동작하지 않을 수 있습니다.
  3. 타이머의 정확성:
    • 타이머는 게임의 프레임 속도와 델타 타임에 영향을 받으므로, 매우 높은 정밀도가 요구되는 작업에는 적합하지 않을 수 있습니다.

FTimerManager의 활용 예시

  • 적 스폰: 일정 시간 간격으로 적을 생성.
  • 버프 지속 시간: 일정 시간 후 효과를 제거.
  • 애니메이션 이벤트: 특정 시간 후 애니메이션 상태 변경.
  • UI 업데이트: 주기적으로 화면에 표시되는 정보를 업데이트.

FTimerManager는 언리얼 엔진에서 시간 기반 작업을 관리하는 데 매우 유용한 도구로, 게임 로직을 효율적이고 간결하게 구현할 수 있게 합니다.


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기주도학습을 목적으로 라이브 스트리밍을 합니다. 📢 1인 게임 개발을 목표로 Unreal과 Blender를 학습 중입니

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형