- 개요
적들이 몰아닥치는 웨이브 시스템을 추가하여 웨이브에 따라 다르게 적들을 스폰하도록 설정한다
- 스크립트 작업
1) WaveData 클래스

EnemySpawnInfo 구조체를 생성한다
해당 구조체를 사용하여 스폰할 적과 적의 개수를 지정한다
Serializable 속성을 수식하여 에디터에서 C# 구조체를 조작할 수 있도록 설정한다

언리얼의 데이터 애셋에 해당하는 ScriptableObject 클래스를 생성한다
CreateAssetMenu 속성을 수식하여 에디터에서 해당 클래스의 인스턴스를 생성할 수 있다
EnemySpawnInfo 구조체를 저장하는 리스트를 사용하여 웨이브마다 스폰할 적을 지정한다
2) EnemyManager 클래스

적을 스폰하고 관리하는 매니저 클래스에 위와 같이 멤버변수를 추가한다
- allWaves 멤버변수 : 웨이브별로 스폰할 적의 정보를 담은 ScriptableObject들
- currentWaveIndex 멤버변수 : 현재 웨이브를 가리키는 인덱스
- enemiesToCreate 멤버변수 : 스폰할 적들을 저장하는 리스트

Start 함수에서 StartWave 함수를 호출하여 첫 번째 웨이브를 시작한다

Update 함수의 로직을 위와 같이 수정하여 스폰할 적이 존재하는 경우에만 로직을 진행한다

StartWave 함수의 로직은 위와 같다
CreateNewEnemyWave 함수를 호출하여 현재 웨이브에서 스폰할 적을 설정한다
이후 적을 스폰하는 간격을 초기화한다

CreateNewEnemyWave 함수의 로직은 위와 같다
현재 웨이브의 WaveData에 저장된 waveInfo를 순회하면서
스폰할 적의 프리팹을 List에 저장하고 순회가 종료되면 해당 List를 반환한다

CreateEnemy 함수의 로직은 위와 같다
GetRandomEnemy 함수를 호출하여 스폰할 수 있는 적들 중에서 무작위로 하나의 적을 골라 생성한다

GetRandomEnemy 함수의 로직은 위와 같다
스폰할 수 있는 적들중에서 무작위로 하나의 적을 선택하여 반환하고
선택된 적은 enemiesToCreate 변수에서 제거하여 다시 선택되지 않도록 설정한다

NextWave 함수는 웨이브를 진행시키는 함수이다
현재까지는 사용하지 않는다
- 애셋 작업
1) WaveData 애셋

위와 같이 구성한 WaveData 애셋을 생성한다
4마리의 기본 적과 2마리의 빠르게 움직이는 적을 생성한다
2) EnemyManager 오브젝트

EnemyManager 오브젝트에 1)에서 생성한 WaveData 애셋을 변수로 추가한다
하나의 WaveData만 존재하므로 1개의 웨이브만 진행한다
- 최종 실행 결과

'유니티 엔진 - 게임 프로젝트 > 타워 디펜스 게임' 카테고리의 다른 글
| 유닛 세팅 - 2) 유닛의 공격 이펙트 추가 (0) | 2026.05.26 |
|---|---|
| 유닛 세팅 - 1) 타워 유닛 클래스 생성 (0) | 2026.05.25 |
| 적 세팅 - 3) 적의 생성과 파괴 (0) | 2026.05.19 |
| 적 세팅 - 2) 적의 움직임 설계 (0) | 2026.05.18 |
| 적 세팅 - 1) AI Navigation 패키지의 사용 (0) | 2026.05.18 |