Menu
CoddyTech

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

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

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

Задание

Легко

Замедли движение персонажа в болоте вдвое.

  1. Ниже float s = speed; напиши if (Vector3.Distance(transform.position, swamp) < 3f).
  2. Внутри него присвой s = speed / 2;. Оставь поле speed и строки движения без изменений.

Нажми «Играть» и пройди прямо через болото: персонаж замедлится в нём. Затем нажми «Проверить».

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

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;
    }
}

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

Потренируйтесь самостоятельно: Песочница Unity