오늘은 Enemy Spawn에 관련하여 간단하게 작업을 진행했다.
Enemy Sprite를 사용하여 Enemy Object를 만든 후, Asset에 포함되어있는 Enemy Animation을 추가해서 Prefab으로 만들었다.


위에서 만든 Prefab을 Enemy Spawner를 활용하여 Player 주변에 설정한 Point에서 무작위로 Spawn되게 했다.

Enemy Spawner는 늘 그래왔듯이 Coroutine을 사용했고, 저번에 배웠던 Object Pooling을 적용하여 미리 만들어놨던 Enemy Object를 하나 받아서 Spawn하는 방식으로 코드를 작성했다.

이런 게임을 보면 게임을 진행함에 따라 Player가 강력해지고, 이에 맞춰 더 강한 Enemy가 나오는 것이 일반적이다.
따라서 이번 프로젝트에서도 현재 Level에 따라 Enemy의 종류를 변경시키는 System을 추가했다.
Level에 따른 Enemy의 속성 값을 저장할 SpawnData Class를 만들었고, Enemy Spawner의 Inspector 창에서 직접 값을 조정할 수 있도록 설정했다.



위 사진을 보면 Spawn Data에는 2가지 값이 존재하는데 첫 번째 값을 예시로 들어보겠다.
첫 번째 Spawn Data는 Spawn 간격이 0.7, Spawn되는 Type은 Enemy A이며 해당 Enemy의 Animation Controller는 AcEnemy1, Hp는 10, MoveSpeed는 2로 설정했다.
Level 1에서는 위 Data와 같은 스펙을 가진 Enemy가 Spawn된다는 뜻이며, Level 2에서는 그 아래에 있는 Data를 참조하여 Enemy가 Spawn된다.
Level은 Test를 위해 간단하게 현재 게임의 진행 시간을 기준으로 10초마다 Level이 1씩 오르게 설정했다.

즉, 0 ~ 9초는 Enemy A, 10 ~ 19초는 Enemy B가 Spawn된다.
위의 Level에 따른 Spawn Data 값을 Enemy를 Spawn할 때 전달해주면 Enemy의 내부 값이 설정된다.


위 방식으로 하면 Enemy의 종류마다 Prefab을 관리할 필요없이 Enemy Prefab 하나만 가지고 다양한 종류의 Enemy를 만들어낼 수 있다.
단, Enemy 별로 하는 행동이나 기능이 다를 경우에는 제약이 있을 수 있지만, 기본적인 값만 다르고 같은 기능을 하는 Enemy들의 경우에는 하나의 Prefab만 사용하므로 리소스 절약 및 유지보수 측면에서 장점이 있다.

처음 10초동안은 초록색의 Enemy A가 나오다가 이후에는 하얀색의 Enemy B가 나오는 것을 볼 수 있다.
또한 Spawn Data에서 작성한 값을 바탕으로 Enemy A와 Enemy B의 Spawn Interval, MoveSpeed 등이 다른 것을 확인할 수 있다.