Menu
CoddyTech

적 웨이브

Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 50개 중 44번째.

challenge icon

챌린지

중급

이제 적은 웨이브 단위로 등장하며, 웨이브는 데이터입니다. 이전 레슨의 모든 내용을 유지하세요. 아레나에는 더 이상 자체 적이 없습니다. 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
{
    // 이후 강의에서 이 부분을 구현합니다: 웨이브를 경기장으로 보냅니다.
}

Unity 게임 아키텍처의 모든 레슨