내배캠 TIL

[내배캠 TIL 260112] Unreal Timer를 활용한 액터 생성

xodn246 2026. 1. 13. 21:00

Timer 기반 상태 토글

  • FTimerHandle과 GetWorldTimerManager().SetTimer()를 사용하여 일정 시간 후 함수를 호출할 수 있다.
  • 이 방식을 사용하면 Tick에서 매 프레임 체크하지 않고도, 시간 기반 이벤트를 쉽게 구현 가능
 
GetWorldTimerManager().SetTimer(BlinkToggleTimeHandle, this, &AA_BlinkActor::ToggleVisible, StartDelay, false);
  • 위 코드처럼 BeginPlay에서 Timer를 1회 실행하면 일정 시간 후 지정한 함수가 호출된다.

깜빡이는 발판 구현 예시

  1. Timer가 ToggleVisible을 호출 → Mesh와 Collision 활성화
  2. Timer가 ToggleInvisible을 호출 → Mesh와 Collision 비활성화
  3. 두 함수가 서로를 다시 Timer로 호출하여 반복 수행
void AA_BlinkActor::ToggleVisible() 
{ 
    GetWorldTimerManager().SetTimer(BlinkToggleTimeHandle, this, &AA_BlinkActor::ToggleInvisible, VisibleTime, false); IsBlink = true; SetPlatformActive(IsBlink); 
} 
void AA_BlinkActor::ToggleInvisible() 
{ 
    GetWorldTimerManager().SetTimer(BlinkToggleTimeHandle, this, &AA_BlinkActor::ToggleVisible, InVisibleTime, false); 
    IsBlink = false; 
    SetPlatformActive(IsBlink); 
} 
void AA_BlinkActor::SetPlatformActive(bool isActive) 
{ 
    MeshComp->SetVisibility(isActive, true); 
    MeshComp->SetCollisionEnabled(isActive ? ECollisionEnabled::QueryAndPhysics : ECollisionEnabled::NoCollision); 
}
  • SetPlatformActive에서 Mesh의 Visibility와 Collision을 동시에 켜고 끌 수 있다.
  • IsBlink bool 변수를 이용해 현재 상태를 추적한다.
  • Timer를 이용해 함수가 서로를 호출하면 자동 반복 깜빡임 구현 가능

핵심 포인트

  • Timer는 Tick과 달리 매 프레임 실행되지 않아 성능 부담이 적다.
  • Timer를 활용하면 **움직임/회전뿐 아니라 상태 변화(Visibility, Collision 등)**도 주기적으로 제어 가능
  • BlinkActor 구조를 MoveActor와 결합하면, 이동 중에도 주기적으로 상태를 토글할 수 있음
  • FTimerHandle은 각 Timer를 구분하는 역할을 하며, 중복 호출이나 취소에 필요하다

즉, Tick은 매 프레임 처리해야 하는 계산(위치, 회전 등)에, Timer는 일정 주기 반복 이벤트(깜빡임, 상태 토글 등)에 적합하다.