카테고리 없음
2026/04/30 TIL
anna59
2026. 4. 30. 23:53
오늘의 목표
과제 8번 필수 기능 구현
한 레벨 내에서 여러 Wave 구현하기.
Level 로직을 활용하여 하나의 level 안에서 Wave를 구현한다.
다만, 게임 전체에서 통괄해야할 데이터가 없으므로 GameInstance를 불러올 필요 없이 멤버 변수만 사용하면 된다.
각각의 Wave 데이터를 Struct로 만들어서 TArray로 저장한 다음, 각각의 Wave에 CurrentWaveIndex로 접근하는 방식이다.
void ASpartaGameState::StartWave()
{
GetWorldTimerManager().ClearTimer(WaveTimerHandle);
GetWorldTimerManager().ClearTimer(ItemSpawnTimerHandle);
SpawnCount = 0;
SpawnedCoinCount = 0;
CollectedCoinCount = 0;
if (Waves.IsValidIndex(CurrentWaveIndex))
{
WaveDuration = Waves[CurrentWaveIndex].WaveDuration;
MaxSpawn = Waves[CurrentWaveIndex].ItemSpawnNum;
}
// 시작 문구
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, FString::Printf(TEXT("WAVE %d 시작"), CurrentWaveIndex + 1));
UpdateHUD();
GetWorldTimerManager().SetTimer(
WaveTimerHandle,
this,
&ASpartaGameState::OnWaveTimeUp,
WaveDuration,
false
);
if (MaxSpawn)
{
SpawnItem();
GetWorldTimerManager().SetTimer(
ItemSpawnTimerHandle,
this,
&ASpartaGameState::SpawnItem,
(WaveDuration / MaxSpawn),
true
);
}
UE_LOG(LogTemp, Warning, TEXT("Wave %d Start!, Spawned %d coin"),
CurrentWaveIndex + 1,
SpawnedCoinCount);
}