- 개요
이전에 생성한 EnemyManger 클래스의 이름을 WaveManager로 변경한다
또, 적을 생성하는 포탈을 추가하여 웨이브 별 생성할 적의 데이터는 WaveManager에서 관리하고
직접 적을 생성하는 코드는 포탈에서 수행하도록 구성을 변경한다
- 스크립트 작업
1) TileSlot 클래스

UpdateChildren 함수의 기존 로직을 수정하여 생성된 자식 오브젝트의 태그가 그대로 유지되도록 설정한다
2) WaveManager 클래스

적들의 웨이브를 담당하는 WaveManager 클래스에 위의 멤버변수를 추가한다
- enemiesToCreate 멤버변수 : 생성할 적들을 저장하는 큐
- activePortals 멤버변수 : 현재 맵에 존재하는 포탈

Awake 함수에서 enemiesToCreate 변수를 초기화한다

포탈과 관련된 3개의 함수를 추가한다
- RegisterPortal 함수 : 포탈을 등록하는 함수
- UnregisterPortal 함수 : 포탈을 등록해제하는 함수
- HasPortal 함수 : 포탈이 등록되었는지 확인하는 함수

StartWave 함수의 로직을 위와 같이 수정한다
현재 웨이브의 데이터를 waveList 지역변수에 저장한다
ShuffleList 함수에 waveList 변수를 넘겨주어 무작위로 섞고, enemiesToCreate 멤버변수에 저장한다
이후 activePortals 멤버변수를 순회하면서 StartSpawning 함수를 호출하여 적을 스폰한다

ShuffleList 함수의 로직은 위와 같다
무작위 값을 생성하기 위해 자주 활용되는 피셔-예이츠 셔플 알고리즘을 사용하였다

RequestSpawnEnemy 함수를 위와 같이 구현하였다
해당 함수는 포탈에서 호출하여 스폰할 적을 가져오는 용도로 사용한다

NextWave 함수에 ContextMenu 속성을 추가하여 테스트 용도로 에디터에서 웨이브를 증가시킨다

HasEnemiesLeft 함수를 추가하여 스폰할 적이 남아있는지 확인한다
3) Enemy_Portal 클래스

WaveManager 클래스에 존재하던 적 생성과 관련된 멤버변수를 Enemy_Portal 클래스로 이동시킨다
또, isSpawning 멤버변수를 추가하여 적을 생성할 수 있는지 판단한다

WaveManager에 포탈을 등록하는 작업과 관련된 함수를 추가한다
OnEnable 함수와 Start 함수를 호출하여 포탈을 등록하고
OnDisable 함수를 호출하여 등록된 포탈을 등록해제한다

Update 함수를 위와 같이 구현하여 적을 생성할 수 있는지 확인하고
쿨타임마다 SpawnProcess 함수를 호출하여 적을 생성한다

StartSpawning 함수를 구현하여 isSpawning 변수를 true로 설정하여 적을 스폰할 수 있도록 한다

SpawnProcess 함수의 로직은 위와 같다
WaveManager로부터 RequestSpawnEnemy 함수를 호출하여 생성할 적을 가져오고
Instantiate 함수를 호출하여 적을 생성한다
- 애셋 작업
1) WaveData 데이터 애셋

첫 번째 웨이브의 데이터를 위와 같이 구성하여 2개의 포탈에서 각각 1개의 적을 생성한다

두 번째 웨이브의 데이터를 위와 같이 구성하여 2개의 포탈에서 3개의 적을 나눠서 생성한다
- 최종 실행 결과

'유니티 엔진 - 게임 프로젝트 > 타워 디펜스 게임' 카테고리의 다른 글
| 웨이브 시스템 - 3) 웨이브 연속 처리 (0) | 2026.06.17 |
|---|---|
| 웨이브 시스템 - 2) 적의 이동 방식 개선 (0) | 2026.06.16 |
| 레벨 생성 - 최종) 타일 추가와 타일맵의 NavMesh 수정 (0) | 2026.06.09 |
| 레벨 생성 - 4) 타일맵 생성 (0) | 2026.06.09 |
| 레벨 생성 - 3) 변경할 수 있는 타일 추가 + 타일의 세부 사항 변경 (0) | 2026.06.08 |