Menu
CoddyTech

Волны врагов

Часть раздела Архитектура игр в Unity путешествия по Unity на Coddy. Урок 44 из 50.

challenge icon

Задание

Средне

Теперь враги появляются волнами, а волны задаются данными. Сохрани всё из предыдущих уроков. На арене больше нет собственных врагов: префабы Grunt и Dasher содержат твои скрипты, в углах расположены четыре точки появления, а на объекте Spawner в центре находится скрипт WaveSpawner.

  • В файле WaveSet.cs добавь класс Wave с атрибутом [System.Serializable] и полями public Enemy enemy (префаб), public int count и public float spacing. WaveSet — это ScriptableObject с атрибутом [CreateAssetMenu], полями public List<Wave> waves и public float restBetweenWaves. Ресурс Arena сцены содержит три волны (3 Grunt с интервалом 0.5 с, 2 Dasher с интервалом 1 с, 5 Grunt с интервалом 0.4 с) и отдых длительностью 2 секунды.
  • В Enemy добавь public static event Action<Enemy> Died; событие вызывается с этим врагом прямо перед его уничтожением.
  • В WaveSpawner добавь waveSet и spawnPoints, назначаемые через Inspector, а также public int Wave { get; private set; } — номер текущей волны. Из Start запускается корутина, которая по порядку проходит волны ресурса. Для каждой волны: увеличь Wave на 1 и выведи его значение, например Wave 1; создавай врагов волны в количестве count с интервалом spacing секунд, врага i (начиная с 0) в точке spawnPoints[i % spawnPoints.Length]; жди, пока не останется живых врагов; затем отдыхай restBetweenWaves секунд. После последней волны набор начинается снова с первой, а Wave продолжает увеличиваться: 4, 5 и так далее.
  • Подсчитывай живых врагов с помощью события Died: подпишись на него в OnEnable и отпишись в OnDisable. Спавнер только читает ресурс: в редакторе изменение, внесённое в ресурс во время игры, сохранится в ресурсе после выхода из режима Play.

Нажми Play и переживи несколько волн, затем нажми Check.

Попробуйте сами

using UnityEngine;

public class WaveSpawner : MonoBehaviour
{
    // В одном из следующих уроков здесь появится код, который отправляет волны на арену.
}

Все уроки раздела Архитектура игр в Unity