본문 바로가기
Unreal Engine

Paused 상태에서도 Tick이 가능? (FTickableGameObject 활용법, Tick 우회, 게임정지 대응)

by 브랑제리 2025. 5. 6.
반응형

FTickableGameObject는 언리얼 엔진에서 Actor나 Component에 의존하지 않고 전역적인 Tick을 받을 수 있는 인터페이스입니다. 이를 통해 UI 매니저, 상태 관리자, 게임 시스템 싱글턴 등 다양한 시스템에 독립적인 틱 기반 로직을 구현할 수 있습니다.

✅ 기본 개념

FTickableGameObject는 UObject를 상속받지 않는 순수 클래스에서도 사용할 수 있으며, 최소한 다음 세 가지 함수를 구현해야 합니다.

  • virtual void Tick(float DeltaTime)
  • virtual bool IsTickable() const
  • virtual TStatId GetStatId() const

📄 필수 구현 예제

class FMyTickableObject : public FTickableGameObject
{
public:
    virtual void Tick(float DeltaTime) override
    {
        UE_LOG(LogTemp, Log, TEXT("Tick: %f"), DeltaTime);
    }

    virtual bool IsTickable() const override
    {
        return true;
    }

    virtual TStatId GetStatId() const override
    {
        RETURN_QUICK_DECLARE_CYCLE_STAT(FMyTickableObject, STATGROUP_Tickables);
    }
};

이렇게 구현된 객체는 게임이 실행 중일 때 매 프레임마다 Tick()이 호출됩니다.

⏸ 게임이 Paused 상태일 때도 Tick이 동작하는가?

정답: 예, 가능합니다.

FTickableGameObject는 IsTickableWhenPaused()라는 가상 함수를 통해, 게임이 일시정지 상태에서도 Tick을 받을 수 있도록 설정할 수 있습니다.

🧪 Paused 상태에서도 Tick 받기 예제

class FPausedTickableObject : public FTickableGameObject
{
public:
    float ElapsedTime = 0.0f;

    virtual void Tick(float DeltaTime) override
    {
        ElapsedTime += DeltaTime;
        UE_LOG(LogTemp, Log, TEXT("ElapsedTime while paused: %f"), ElapsedTime);
    }

    virtual bool IsTickable() const override
    {
        return true;
    }

    virtual bool IsTickableWhenPaused() const override
    {
        return true; // ✅ Paused 상태에서도 Tick 허용
    }

    virtual TStatId GetStatId() const override
    {
        RETURN_QUICK_DECLARE_CYCLE_STAT(FPausedTickableObject, STATGROUP_Tickables);
    }
};

이 코드는 게임이 Paused 상태에서도 계속 ElapsedTime을 증가시키며 동작합니다. 타이머, 로딩 상태 모니터링, 서버 응답 대기 등 일시정지와 무관한 시스템에 유용합니다.

📌 사용 시 주의사항

  • FTickableGameObject는 전역 틱 리스트에 등록되므로, Tick 호출 순서 제어가 어렵습니다.
  • 이 객체들은 UWorld 컨텍스트와 무관하게 동작하므로, 다중 월드나 PIE 환경에서 유의해야 합니다.
  • Tick을 멈추고 싶을 경우 IsTickable()에서 false를 반환하도록 하면 됩니다.

✅ 언제 사용하면 좋은가?

  • UI 매니저, 로딩 매니저처럼 Actor와 무관한 클래스에서 Tick이 필요할 때
  • 게임이 일시정지 상태에서도 동작해야 하는 기능 (예: 시간 추적, 서버 통신)
  • 씬 전체에 적용되는 싱글턴 스타일 매니저 클래스

📄 공식 문서

반응형