Unreal Engine

7. FTickableGameObject

CE : 하랑 2026. 2. 1. 17:09

1.FTickableGameObject

FTickableGameObject는 언리얼 엔진에서 AActor UActorComponent 상속 없이 UObject 또는 일반 C++ 클래스가 전역적으로 Tick 함수를 호출받을 수 있게 하는 인터페이스입니다. 

 

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

Unreal Engine에서 BeginPlay(), Tick() 같은 오버라이드 가능한 콜백 함수들이 내부 내용이 비어 있어도 사용하지 않는다면 제거하는 이유는 실제로 성능과 관련이 있습니다.

 

Tick()은 매 프레임 호출됨

  • Tick(float DeltaTime)은 PrimaryActorTick.bCanEverTick = true일 경우, 매 프레임마다 무조건 호출됩니다.
  • 내부가 비어 있어도 엔진은 해당 객체가 틱 가능한지 판단하고, Tick 큐에 넣고, 호출하려는 동작을 반복합니다.
  • 이런 연산은 수천 개의 액터가 있을 경우, 작은 오버헤드도 누적되면 눈에 띄는 성능 저하로 이어집니다.

Tick 등록 자체가 비용

  • bCanEverTick = true 설정 시, 해당 액터는 엔진의 Tick 관리 시스템에 등록됩니다.
  • 이 등록 자체가 내부 자료구조(예: TickTaskManager)에 포함되는 의미가 있으므로, 불필요한 틱 등록은 지양해야 합니다.

 

언리얼 엔진의 ETickableTickType FTickableGameObject 인터페이스를 구현하는 객체가 언제, 어떻게 틱(Tick)을 수행할지 정의하는 열거형(Enum)입니다. 

enum ETickableTickType  
{  
    Conditional,  
    Always,  
    Never,  
    NewObject,  
}

GetTickableTickType은 기본적으로 Always로 설정되어 있으나, 불필요한 틱을 줄이기 위해 Conditional을 사용하는 것이 권장됩니다.

 

주요 ETickableTickType 옵션

  • Always: 객체가 항상 프레임마다 Tick() 함수를 호출합니다.
  • Conditional: IsTickable() 함수가 true를 반환할 때만 Tick()이 호출됩니다.
  • Never: 틱이 전혀 호출되지 않습니다

 

'Unreal Engine' 카테고리의 다른 글

10. FMath  (0) 2026.02.01
9. [언리얼 C++] 멀티캐스트 델리게이트  (0) 2026.02.01
6. Component  (0) 2026.01.18
5. Level, Actor  (0) 2026.01.18
4. RPC 서버  (1) 2026.01.18