Menu
CoddyTech

웨이브

Coddy의 Unity 게임: 타워 디펜스 코스 레슨. 18개 중 4번째.

적들은 웨이브 단위로 등장합니다. 같은 종류의 적들이 경로를 따라 간격을 두고 배치된 뒤, 다음 무리가 등장하기 전까지 잠시 쉬는 방식입니다. 웨이브는 몇 가지 숫자로 이루어져 있으므로 [System.Serializable] 클래스이며, 스포너는 Inspector에 입력할 행으로 표시되는 List<Wave>를 유지합니다. [System.Serializable]이 없으면 Unity는 Wave를 저장할 수 없고, Inspector에 목록이 표시되지 않으며, 목록은 비어 있는 상태로 유지됩니다.

타이밍은 코루틴으로 처리합니다. 코루틴은 생성한 다음 new WaitForSeconds(...)를 반환하여 게임의 나머지 부분을 멈추지 않고 기다리는 루프입니다. 불꽃놀이도 같은 방식으로 연발을 진행하며, 각 연발 뒤에 잠시 멈춥니다.

IEnumerator Show()
{
    foreach (Salvo salvo in salvos)
    {
        for (int i = 0; i < salvo.rockets; i++)
        {
            Instantiate(rocketPrefab, launcher.position, Quaternion.identity);
            yield return new WaitForSeconds(salvo.gap);
        }
        yield return new WaitForSeconds(pause);
    }
}

이제 적들은 프리팹입니다. 프리팹의 필드는 에셋과 프리팹 내부의 오브젝트만 참조할 수 있으므로, 새 적의 waypoints 배열은 비어 있습니다. 스포너가 경로를 소유하고, Instantiate 직후 모든 적에게 경로를 전달합니다. Instantiate는 전달받은 타입을 반환하므로, Enemy 타입의 프리팹 필드를 사용하면 설정할 준비가 된 새 Enemy를 반환합니다.

challenge icon

챌린지

쉬움

Grunt와 Runner는 이제 프리팹이며, 각자 EnemyData를 가진 Tank와 Boss도 추가되었습니다. Spawner 오브젝트는 WP0에 있습니다. 적들을 웨이브로 보내세요:

  1. Wave.cs에서 Wave를 직렬화 가능한 클래스로 만들고, 공개 필드 enemy(Enemy: 프리팹), count(int), spacing(float, 적 두 마리 사이의 초 단위 간격)를 추가하세요.
  2. WaveSpawner에 직렬화된 비공개 필드 세 개를 추가하세요: waves(List<Wave>), waypoints(Transform 배열), timeBetweenWaves(float).
  3. Start에서 웨이브를 순서대로 진행하는 코루틴을 실행하세요. 각 웨이브마다 timeBetweenWaves만큼 기다리고, 1부터 시작하는 웨이브 번호를 Wave 1 형식으로 로그에 출력한 다음, 해당 웨이브의 적을 count만큼 첫 번째 웨이포인트에 생성하고, 각 적에 waypoints를 지정한 뒤 적을 생성할 때마다 spacing만큼 기다리세요.
  4. 마지막 웨이브가 끝난 후 All waves sent를 로그에 출력하세요.

Inspector에서 게임의 8개 웨이브와 8초의 휴식 시간을 설정합니다. Play를 눌러 첫 웨이브들이 오는 것을 지켜본 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

// 나중에 구현: 적들을 웨이브 단위로 경로를 따라 보냅니다.
public class WaveSpawner : MonoBehaviour
{
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Unity 게임: 타워 디펜스의 모든 레슨