적 웨이브
Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 50개 중 44번째.
챌린지
중급이제 적은 웨이브 단위로 등장하며, 웨이브는 데이터입니다. 이전 레슨의 모든 내용을 유지하세요. 아레나에는 더 이상 자체 적이 없습니다. Grunt와 Dasher 프리팹에 스크립트가 있고, 네 개의 스폰 지점은 각 모서리에 있으며, 가운데의 Spawner 오브젝트에는 WaveSpawner 스크립트가 있습니다.
WaveSet.cs에서[System.Serializable]클래스Wave를 추가하고,public Enemy enemy(프리팹),public int count,public float spacing을 포함합니다.WaveSet은[CreateAssetMenu],public List<Wave> waves,public float restBetweenWaves를 가진 ScriptableObject입니다. 씬의Arena에셋에는 세 개의 웨이브(0.5초 간격으로 그런트 3마리, 1초 간격으로 대셔 2마리, 0.4초 간격으로 그런트 5마리)와 2초의 휴식 시간이 설정되어 있습니다.Enemy에public static event Action<Enemy> Died를 추가하고, 적이 파괴되기 직전에 해당 적을 전달해 이벤트를 발생시킵니다.WaveSpawner에는 Inspector에서 설정하는waveSet과spawnPoints, 그리고 진행 중인 웨이브 번호인public int Wave { get; private set; }가 있습니다.Start에서 코루틴이 실행되어 에셋의 웨이브를 순서대로 진행합니다. 각 웨이브에서Wave에 1을 더하고Wave 1처럼 로그를 출력합니다. 웨이브의 적을count만큼spacing초 간격으로 생성하며, 0부터 시작하는 적 번호i는spawnPoints[i % spawnPoints.Length]에서 생성합니다. 적이 모두 살아 있지 않을 때까지 기다린 다음restBetweenWaves초 동안 쉽니다. 마지막 웨이브가 끝나면 세트가 처음부터 다시 시작되며,Wave는 계속 증가합니다. 즉 4, 5 등으로 이어집니다.Died이벤트를 사용해 살아 있는 적의 수를 셉니다.OnEnable에서 구독하고OnDisable에서 구독을 해제합니다. 스포너는 에셋의 내용을 읽기만 합니다. 게임 실행 중 에디터에서 에셋을 변경해도 Play가 끝난 뒤 변경 사항은 에셋에 유지됩니다.
Play를 눌러 몇 개의 웨이브를 버틴 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
public class WaveSpawner : MonoBehaviour
{
// 이후 강의에서 이 부분을 구현합니다: 웨이브를 경기장으로 보냅니다.
}