Timer 기반 상태 토글
- FTimerHandle과 GetWorldTimerManager().SetTimer()를 사용하여 일정 시간 후 함수를 호출할 수 있다.
- 이 방식을 사용하면 Tick에서 매 프레임 체크하지 않고도, 시간 기반 이벤트를 쉽게 구현 가능
GetWorldTimerManager().SetTimer(BlinkToggleTimeHandle, this, &AA_BlinkActor::ToggleVisible, StartDelay, false);
- 위 코드처럼 BeginPlay에서 Timer를 1회 실행하면 일정 시간 후 지정한 함수가 호출된다.
깜빡이는 발판 구현 예시
- Timer가 ToggleVisible을 호출 → Mesh와 Collision 활성화
- Timer가 ToggleInvisible을 호출 → Mesh와 Collision 비활성화
- 두 함수가 서로를 다시 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는 일정 주기 반복 이벤트(깜빡임, 상태 토글 등)에 적합하다.
'내배캠 TIL' 카테고리의 다른 글
| [내배캠 TIL 260120] Unreal Pawn 클래스로 캐릭터 Move 구현 (0) | 2026.01.20 |
|---|---|
| [내배캠 TIL 260116] Unreal PlayerController 와 Input Mapping Context (0) | 2026.01.16 |
| [내배캠 TIL 260112] Unreal c++을 활용한 액터의 이동과 회전 (0) | 2026.01.12 |
| [내배캠 TIL 260109] Unreal 액터의 생명주기 (0) | 2026.01.09 |
| [내배캠 TIL 260108] Unreal & VS 호환 문제 (0) | 2026.01.08 |