Menu
CoddyTech

Расстояние между объектами

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 21 из 67.

Vector3.Distance(a, b) — это расстояние между двумя точками в единицах измерения по прямой через все три оси. Это длина отрезка между ними, (a - b).magnitude, поэтому порядок a и b не имеет значения. Расстояние от (0, 0, 0) до (3, 0, 4) равно 5.

Если сравнить расстояние с числом, скрипт сможет определить, когда что-то находится рядом. Этот турист может согреть руки, только если находится не дальше 4 единиц от костра, положение которого задаёт Inspector:

public Vector3 campfire = new Vector3(3, 0, 4);

void Update()
{
    float d = Vector3.Distance(transform.position, campfire);
    if (d < 4f && Input.GetKeyDown(KeyCode.Space))
    {
        Debug.Log("You warm your hands");
    }
}

При вычислении расстояния учитывается и высота: турист, находящийся на 5 единиц выше костра, находится от него на расстоянии 5 единиц, а не 0. Если высоту учитывать не нужно, сравнивайте две точки с одинаковым значением y.

challenge icon

Задание

Легко

Путешественник пересекает болото. В пределах 3 единиц от центра болота, swamp (задаётся в Inspector), он движется с половиной своей speed; дальше — на полной скорости. Код движения уже написан: определите скорость для каждого кадра, не изменяя само поле speed.

Нажмите Play и пройдите через болото, затем нажмите Check.

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

using UnityEngine;

public class Walker : MonoBehaviour
{
    public float speed = 4f;
    public Vector3 swamp = new Vector3(0, 0.5f, 0);

    void Update()
    {
        float s = speed;
        // На расстоянии до 3 единиц от болота двигайся с половинной скоростью.

        Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
        transform.position += direction.normalized * s * Time.deltaTime;
    }
}
quiz iconПроверьте себя

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

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