- 개요
이전의 WaveManager의 Update 함수를 최적화하는 방식을 코루틴을 사용하도록 수정한다
또, 실시간 맵 변경 기능을 추가하여 적이 몰아치는 웨이브에 따라서 맵을 변경하는 기능을 추가한다
- 스크립트 작업
1) GridBuilder 클래스

생성한 타일맵의 NavMeshSurface를 멤버변수로 추가하고 Awake 함수에서 변수의 값을 설정한다

GetNavMesh 함수를 호출하여 NavMeshSurface를 반환한다
2) WaveData 클래스

웨이브의 정보를 저장하는 WaveData 클래스에 멤버변수를 추가한다
- nextGrid 멤버변수 : 다음 웨이브에서 변경할 타일맵의 프리팹
- newPortals 멤버변수 : 다음 웨이브에서 맵에 추가할 포탈의 프리팹들
3) WaveManager 클래스
3 - 1) 함수 호출 최적화 방식 수정

InitWave 함수를 추가하여 의도하는 웨이브에 해당하는 적들을 생성한다

CoWaveLoop 코루틴 함수를 추가한다
웨이브를 진행할 수 있다면, InitWave 함수를 호출하여 현재 웨이브에 포함된 적들을 생성한다
0.5초 간격으로 적이 모두 생성되었는지 여부 + 적을 모두 처치했는지 여부를 체크한다
체크되었다면 다음 웨이브를 위해 웨이브 인덱스를 증가시키고
CheckForNewLevelLayout 함수를 호출하여 맵을 변경시켜야 한다면 변경시킨다
이후 웨이브 간의 타이머를 작동시켜 다음 웨이브까지의 대기 시간을 적용한다

Start 함수에서 StartCoroutine 함수를 통해 CoWaveLoop 코루틴 함수를 호출한다
3 - 2) 실시간 맵 변경

currentGrid 멤버변수를 추가하여 기본 타일맵을 저장한다

UpdateLevelGrid 함수를 추가한다
현재 사용중인 타일맵을 파괴하고 다음 웨이브의 타일맵의 프리팹을 인자로 받아 생성한다

UpdateLevelPortals 함수를 추가한다
다음 웨이브에서 생성할 포탈의 프리팹들을 인자로 받아 생성한 후에 WaveManager에 등록한다

CheckForNewLevelLayout 함수의 로직은 위와 같다
다음 웨이브에 해당하는 WaveData를 가져온 후에
타일맵을 변경 + 포탈을 생성하고 NavMeshSurface를 새롭게 구성한다
- 애셋 작업
1) WaveData 애셋



세 번째 웨이브의 WaveData를 위와 같이 구성하여
적을 생성하기 이전에 타일맵을 변경한다
- 최종 실행 결과

'유니티 엔진 - 게임 프로젝트 > 타워 디펜스 게임' 카테고리의 다른 글
| 카메라 - 1) 카메라의 이동과 회전 (0) | 2026.06.23 |
|---|---|
| 웨이브 시스템 - 최종) 적 이동 개선 (0) | 2026.06.22 |
| 웨이브 시스템 - 3) 웨이브 연속 처리 (0) | 2026.06.17 |
| 웨이브 시스템 - 2) 적의 이동 방식 개선 (0) | 2026.06.16 |
| 웨이브 시스템 - 1) 적을 생성하는 포탈의 추가 (0) | 2026.06.16 |