Волны врагов
Часть раздела Архитектура игр в Unity путешествия по Unity на Coddy. Урок 44 из 50.
Задание
СреднеТеперь враги появляются волнами, а волны задаются данными. Сохрани всё из предыдущих уроков. На арене больше нет собственных врагов: префабы 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
1Компоненты, а не иерархии
Небольшие компонентыБазовый скрипт врагаАбстрактные компонентыСовместная работа компонентовПовторение: модульная турель4Сериализованные данные
Сериализуемые классыСписки в InspectorПеречисления в InspectorПовторение: таблица лута2Интерфейсы в Unity
IDamageableИнтерфейсы и TryGetComponentGetComponentsПовторение: клавиша взаимодействия5ScriptableObjects
Ресурсы данныхХарактеристики оружияОбщие настройкиВолны как данныеПовторение: база предметов