Menu
CoddyTech

Двигайся к точке

Часть раздела Основы скриптинга в 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 для плавного замедления.

challenge icon

Задание

Средне

Дрон зависает в воздухе, пока ты не нажмёшь 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 в лог по прибытии
    }
}
quiz iconПроверьте себя

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

Все уроки раздела Основы скриптинга в Unity