Волна
Урок 5 из 25 курса Игра на Unity: Tower Defense на Coddy.
Теперь Grunt и Runner — префабы, как и Tank с Boss, а Spawner находится на WP0. Волна — это несколько чисел: какой враг, сколько их и какое расстояние между ними. Поэтому Wave — это класс [System.Serializable], а спавнер хранит List<Wave>, который Inspector заполняет восемью волнами игры. Без [System.Serializable] Unity не сможет заполнить список, и он останется пустым.
Появление врагов с интервалами выполняется корутиной: yield return new WaitForSeconds(...) ждёт, не останавливая игру. Префаб не может ссылаться на путевые точки в сцене, поэтому сразу после Instantiate спавнер передаёт каждому новому врагу его собственные путевые точки:
Enemy enemy = Instantiate(wave.enemy, waypoints[0].position, Quaternion.identity);
enemy.waypoints = waypoints;
yield return new WaitForSeconds(wave.spacing);Задание
ЛегкоОтправь первую волну Grunt по пути.
- В
Wave.csдобавь атрибут[System.Serializable]кWave, а такжеpublic Enemy enemy;,public int count;иpublic float spacing;. - В
WaveSpawnerдобавь[SerializeField] private List<Wave> waves;и[SerializeField] private Transform[] waypoints;. - Из
Startзапусти корутину, которая создаётwaves[0].countврагов, как описано выше.
Нажми «Играть»: шесть Grunt выйдут на путь с интервалом в 1,2 секунды. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
// Будет добавлено позже: отправляет врагов по пути волнами.
public class WaveSpawner : MonoBehaviour
{
}
Все уроки раздела Игра на Unity: Tower Defense
Потренируйтесь самостоятельно: Песочница Unity