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

적 세팅 - 최종) 웨이브 시스템 추가

monstro 2026. 5. 19. 15:35
728x90
반응형

- 개요

적들이 몰아닥치는 웨이브 시스템을 추가하여 웨이브에 따라 다르게 적들을 스폰하도록 설정한다

 

- 스크립트 작업

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개의 웨이브만 진행한다

 

- 최종 실행 결과

728x90
반응형