언리얼엔진5 공부

[TIL] Unreal Engine 5: TMap과 TimerManager를 이용한 확장형 쿨타임 시스템

Client Side 2025. 12. 30. 10:55

1. 오늘 학습한 핵심 개념

  • FTimerHandle: 언리얼 엔진에서 특정 시간 뒤 함수를 실행하거나 반복 실행을 관리하기 위한 '영수증' 같은 개념이다.
  • TMap 활용: 스킬의 행 이름(FName)을 Key로, 타이머 핸들을 Value로 저장하여 수많은 스킬의 쿨타임을 하나의 컴포넌트에서 효율적으로 관리하는 법을 배웠다.

2. 코드 패턴 분석

// 1. 타이머 핸들 저장소
TMap<FName, FTimerHandle> SkillTimerMap;

// 2. 쿨타임 시작 및 람다(Lambda) 활용
void StartCooldown(FName SkillName, float Time) {
    FTimerHandle& Handle = SkillTimerMap.FindOrAdd(SkillName);
    
    // 람다 식을 사용해 어떤 스킬이 끝났는지 인자로 전달 가능
    GetWorld()->GetTimerManager().SetTimer(Handle, [this, SkillName]() {
        OnCooldownFinished(SkillName);
    }, Time, false);
}

 

3. 왜 이 방식이 좋은가? (Senior 개발자적 관점)

  • 성능 최적화: Tick에서 매 프레임 DeltaTime을 더하며 계산하지 않고, 엔진의 TimerManager 시스템에 맡기므로 CPU 자원을 아낄 수 있다.
  • 데이터 중심 설계(Data-Driven): 데이터 테이블의 행 이름만 넘겨주면 알아서 동작하므로 유지보수가 매우 뛰어나다.
  • UI 연동 용이: GetTimerRemaining 함수를 사용하면 별도의 변수 없이도 UI에 남은 시간을 즉시 표시할 수 있다.

4. 실무 적용 팁

  • 멀티플레이어 게임에서는 클라이언트 UI뿐만 아니라 서버에서도 동일한 로직으로 쿨타임을 체크해야 해킹(쿨타임 무시)을 방지할 수 있다.
  • TMap에 저장된 핸들은 객체가 파괴될 때 ClearAllTimersForObject(this)를 통해 안전하게 정리해주는 습관이 중요하다.