유니티 엔진 - 게임 프로젝트/타워 디펜스 게임

웨이브 시스템 - 3) 웨이브 연속 처리

monstro 2026. 6. 17. 19:23
728x90
반응형

- 개요

적이 생성되는 하나의 웨이브가 끝나면 자동으로 다음 웨이브를 시작하도록 구성한다

 

- 개요

1) WaveManger 클래스

 

위와 같이 멤버변수를 추가한다

  • timeBetweenWaves 멤버변수 : 웨이브간시간 간격
  • waveTimer 멤버변수 : 웨이브 시작을 위한 시간을 측정하는 타이머
  • activeEnemies 멤버변수 : 현재 생성된 적들
  • currentWaveCompleted 멤버변수 : 생성된 적들이 전부 파괴되었는지 여부
  • checkInterval 멤버변수 : 함수 호출최적화하기 위한 함수 호출 간격
  • nextCheckTime 멤머변수 : 함수 호출을 위한 시간을 측정하는 타이머

 

 

StartWave 함수에 코드를 추가하여 하나의 웨이브의 적들을 모두 생성한 후에 다음 웨이브를 진행시킨다

 

 

NextWave 함수를 위와 같이 수정하여 다음 웨이브를 진행시키고 웨이브 클리어 여부를 False로 설정한다

StartNextWave 함수를 추가하고 위와 같이 로직을 추가하여 적이 존재하지 않으면 NextWave 함수를 호출한다

 

 

HasEnemiesLeft 함수를 추가하여 생성해야 할 적이 남아있는지 판단한다

 

 

activeEnemies 멤버변수와 관련된 함수들을 추가한다

  • GetActiveEnemies 함수 : 해당 멤버변수를 반환하는 함수
  • RegisterActiveEnemy 함수 : 해당 멤버변수에 생성한 적을 등록하는 함수
  • RemoveActiveEnemy 함수 : 제거된 적을 해당 멤버변수에서 제거하는 함수
  • AllEnemiesDefeated 함수 : 적들이 남아있는지 판단하는 함수

 

 

ReadyToCheck 함수를 추가하여 checkInterval 변수의 값의 간격마다 true를 반환한다

해당 함수를 활용하여 다른 함수들이 매번 호출되는 것을 방지한다

 

 

Start 함수를 수정하여 currentWaveIndex 멤버변수를 사용하도록 수정한다

 

 

Update 함수를 추가하고 위와 같이 구성한다

HandleWaveCompletion 함수의 로직을 위와 같이 구성하여 일정 간격마다 웨이브의 클리어 여부를 설정한다

HandleWaveTiming 함수의 로직을 구성하여 웨이브가 클리어되었다면 일정시간 후에 다음 웨이브를 실행한다

 

2) Enemy_Base 클래스

 

myPortal 멤버변수를 추가하여 적을 생성한 포탈을 저장한다

 

 

Die 함수를 추가하여 로직을 구성한다

WaveManager의 activeEnemies 멤버변수에서 적을 제거하고 적을 파괴한다

 

 

TakeDamage 함수의 로직을 수정하여 적의 체력이 0 이하로 떨어지면 Die 함수를 호출한다

 

 

SetupEnemy 함수myNewPortal 매개변수를 추가하여 myPortal 멤버변수의 값을 설정한다

 

3) Player_Castle 클래스

 

OnTriggerEnter 함수를 수정하여 트리거된 적의 TakeDamage 함수를 호출한다

 

4) Enemy_Portal 클래스

 

SpawnProcess 함수의 로직을 위와 같이 수정하여

생성한 적을 WaveManager의 activeEnemies 변수에 등록한다

또, 생성한 적의 myPortal 변수의 값을 설정한다

 

- 애셋 작업

1) WaveData 애셋

첫 번째 WaveData

 

두 번째 WaveData

 

위와 같이 첫 번째 웨이브두 번째 웨이브를 구성한다

 

- 최종 실행 결과

728x90
반응형