Контрольные точки
Урок 1 из 25 курса Игра на Unity: Tower Defense на Coddy.
В этом курсе ты создашь игру в жанре «защита башни»: враги волнами идут по пути к твоей базе, а башни, которые ты строишь вдоль пути, останавливают их. В каждом уроке добавляется одна функция. Нажми «Играть», чтобы попробовать игру, и «Проверить», чтобы проверить решение. Все двенадцать скриптов есть в проекте с самого начала; большинство из них — короткие заготовки, которые заполняются в последующих уроках, а EnemyData предоставляется для урока 2.
Путь состоит из восьми контрольных точек: WP0 находится у места появления врагов, а WP7 — у базы; они хранятся в массиве waypoints объекта Grunt. Grunt хранит индекс точки, к которой направляется, и движется к ней. Vector3.MoveTowards никогда не перемещается дальше цели, поэтому Grunt точно останавливается в контрольной точке, и == позволяет определить, что он прибыл:
Vector3 target = waypoints[3].position;
transform.position = Vector3.MoveTowards(transform.position, target, 5f * Time.deltaTime);
if (transform.position == target)
{
// прибыли: направляемся к следующей точке
}После последней контрольной точки индекс становится равен waypoints.Length, и чтение массива по этому индексу вызовет ошибку, поэтому проверь индекс, прежде чем использовать его.
Задание
ЛегкоЗаставь Grunt пройти по пути от одной контрольной точки к другой.
- В
Enemyдобавьprivate int next = 1;(Grunt начинает на WP0). - В
Updateвыполни возврат, когдаnext >= waypoints.Length. - Перемещайся к
waypoints[next].positionс помощьюVector3.MoveTowardsсо скоростьюspeed * Time.deltaTime; когда объект доберётся до точки, выполниnext++.
Нажми «Играть»: Grunt пройдёт через каждый поворот и остановится у базы. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public Transform[] waypoints;
void Update()
{
// Здесь пройди по маршруту: от одной путевой точки к другой, по порядку.
}
}
Все уроки раздела Игра на Unity: Tower Defense
Потренируйтесь самостоятельно: Песочница Unity