UE5 부트캠프(TIL)

[TIL]Intelligence팀 프로젝트 적 스폰, 아이템 스폰

Yellow Kirin 2025. 7. 30. 22:54

이번에는 언리얼 엔진에서 적 스포너아이템 스폰 시스템을 직접 구현했다.
핵심은 타이머를 활용한 반복적 액터 생성! GetWorldTimerManager().SetTimer() 함수의 존재감이 정말 컸다.

1. 타이머 기반 스포너 설계

처음엔 BeginPlay()에서 한 번만 생성했지만, 원하는 건 일정 시간 간격으로 반복 생성이었다.
이를 위해 언리얼의 SetTimer를 활용하면, 매 n초마다 원하는 함수를 반복 호출할 수 있다.


// BeginPlay()에서 타이머 등록
void ATItemSpawner::BeginPlay()
{
    Super::BeginPlay();

    GetWorldTimerManager().SetTimer(
        SpawnTimerHandle,          // FTimerHandle
        this, 
        &ATItemSpawner::TrySpawnItem, // 콜백 함수
        SpawnInterval,             // n초 간격
        true                       // 반복(true)
    );
}
  • 적 스포너도, 아이템 스포너도 이 구조를 그대로 사용 가능
  • TrySpawnItem()에서는 현재 스폰된 객체가 없을 때만 새로 생성

2. SetTimer로 제어하는 반복 로직

기존에는 직접 Tick()에서 시간 카운트하거나, 복잡한 상태 체크가 필요했다.
하지만 SetTimer를 쓰면 불필요한 로직 없이 간결하게 주기적 작업을 처리할 수 있다.


if (!IsValid(SpawnedItem)) {
    SpawnedItem = GetWorld()->SpawnActor(...);
    // 필요시: SpawnedItem->OnDestroyed.AddDynamic(...) 바인딩
}

3. 느낀 점 & 활용 포인트

  • 타이머는 반복적/주기적 이벤트 처리에 최적이다
  • 언리얼에서 SetTimer 한 줄로 복잡한 타이밍 제어를 대체할 수 있음
  • 게임의 웨이브 시스템, 보상 상자, 버프 리젠 등 다양한 곳에 적용 가능
  • 생성/파괴 체크(Valid/IsValid)와 타이머의 조합이 깔끔하다