Двигайся к точке
Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 27 из 67.
Vector3.MoveTowards(current, target, maxStep) возвращает точку, расположенную не дальше чем на maxStep ближе к target. Если цель находится ближе, функция возвращает саму цель, поэтому объект никогда не пролетает мимо неё. Если в качестве шага использовать speed * Time.deltaTime, объект движется с постоянной скоростью и останавливается точно в цели. Эта канатная дорога плавно движется к станции со скоростью 2 единицы в секунду:
public Vector3 station = new Vector3(6, 3, 0);
public float speed = 2f;
void Update()
{
transform.position = Vector3.MoveTowards(transform.position, station, speed * Time.deltaTime);
}Когда объект прибывает, каждый последующий вызов снова возвращает station, поэтому вагончик остаётся на месте, и выражение transform.position == station истинно. Для одного числа Mathf.MoveTowards работает так же.
Vector3.Lerp(a, b, t) возвращает точку, находящуюся на доле t пути от a до b: при t = 0.5 она будет посередине. Если записать Lerp(transform.position, station, 2f * Time.deltaTime) в Update(), объект будет проходить часть оставшегося расстояния на каждом кадре: сначала быстро, а ближе к концу всё медленнее, постепенно приближаясь к цели вместо того, чтобы прибыть с заданной скоростью. Используй MoveTowards, когда объект должен двигаться с заданной скоростью и точно останавливаться; используй этот шаблон с Lerp для плавного замедления.
Задание
СреднеДрон зависает в воздухе, пока ты не нажмёшь Space. После этого он летит по прямой к pad — позиции посадочной площадки — со скоростью speed единиц в секунду и точно приземляется на неё. При приземлении он один раз выводит в журнал сообщение Landed, а не повторяет это каждый последующий кадр.
Нажми Играть, нажми Space, затем Проверить.
Попробуйте сами
using UnityEngine;
public class Drone : MonoBehaviour
{
public Vector3 pad = new Vector3(0, 0.25f, 0);
public float speed = 2f;
void Update()
{
// После нажатия Space: лети к pad со скоростью speed и один раз выведи Landed в лог по прибытии
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы скриптинга в Unity
1Ваш первый скрипт
Привет, UnityРазместите кубДвигайте каждый кадрПоворачивайте каждую секундуУправляйте клавишамиПовторение: управляйте кубом2Инспектор
Поля инспектораSerializeFieldЧисла с плавающей точкой и MathfАтрибуты инспектораПовторение: лифт5Преобразования и иерархия
Родители и детиМасштабПосмотри на объектыДвигайся к точкеПовторение: Луна на орбите6Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказать и скрытьПовторение: выключатель света