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

웨이브 시스템 - 1) 적을 생성하는 포탈의 추가

monstro 2026. 6. 16. 11:24
728x90
반응형

- 개요

이전에 생성한 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개의 적나눠서 생성한다

 

- 최종 실행 결과

728x90
반응형