Menu
CoddyTech

Путевые точки

Урок 1 из 18 курса Игра в Unity: защита башен на Coddy.

В этом курсе вы создадите игру в жанре tower defense. Враги волнами движутся по пути к вашей базе, а вы останавливаете их башнями, которые размещаете на строительных площадках, а затем улучшаете и продаёте. В каждом уроке добавляется одна функция. Все двенадцать скриптов игры находятся в проекте с самого начала; большинство из них — короткие заготовки, которые будут заполнены в последующих уроках.

Враг следует по пути через контрольные точки: пустые GameObjects на поворотах, расположенные в массиве в порядке прохождения. Враг хранит индекс контрольной точки, к которой направляется, движется к ней, а по прибытии переходит к следующей. Vector3.MoveTowards(current, target, maxStep) перемещает точку к цели не более чем на maxStep и никогда не дальше неё, поэтому враг оказывается точно в контрольной точке, а == позволяет определить, что он прибыл. Этот патрульный дрон летает между своими постами и начинает сначала после последнего:

public Transform[] posts;
public float speed = 3f;
private int current;

void Update()
{
    Vector3 goal = posts[current].position;
    transform.position = Vector3.MoveTowards(transform.position, goal, speed * Time.deltaTime);
    if (transform.position == goal)
    {
        current = (current + 1) % posts.Length;
    }
}

Враг не движется по кругу: после последней контрольной точки ему некуда идти. Когда индекс достигает Length, он уже не указывает на контрольную точку, а чтение waypoints[waypoints.Length] вызывает исключение IndexOutOfRangeException, поэтому индекс проверяется перед использованием. Контрольные точки расположены на высоте 0.6 над землёй — на уровне центра врага, поэтому движение прямо к ним позволяет ему сохранять ноги на земле.

challenge icon

Задание

Легко

Grunt стоит на первой путевой точке, WP0, а в его скрипте Enemy уже есть восемь путевых точек в waypoints: от WP0 у места появления до WP7 у базы.

  1. Добавь private int next: индекс путевой точки, к которой направляется Grunt. Он начинает с WP0, поэтому next начинается с 1.
  2. В Update перемещай Grunt в направлении waypoints[next] со скоростью speed единиц в секунду с помощью Vector3.MoveTowards.
  3. Достигнув этой путевой точки, направляйся к следующей.
  4. После последней путевой точки остановись: больше никакого движения и никаких ошибок.

Нажми Play и посмотри, как Grunt проходит по пути, затем нажми Check.

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

using UnityEngine;

public class Enemy : MonoBehaviour
{
    public float speed = 2f;
    public Transform[] waypoints;

    void Update()
    {
        // Здесь двигайтесь по маршруту: от одной путевой точки к другой, по порядку.
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Игра в Unity: защита башен