Menu
CoddyTech

Скорость по диагонали

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

Удерживайте одновременно клавиши со стрелками вправо и вверх, и исходные оси задают направление (1, 0, 1). Его длина, .magnitude, равна квадратному корню из 1 + 1, то есть примерно 1,41. Перемещаясь с его помощью, персонаж проходит по диагонали 1,41 единицы за то же время, за которое проходит 1 единицу прямо: на 41% быстрее.

.normalized возвращает копию вектора, направленного так же, но длиной ровно 1 единица: (1, 0, 1) превращается примерно в (0.71, 0, 0.71), а (0, 0, 5) — в (0, 0, 1). При умножении на скорость он перемещается с этой скоростью в любом направлении. Эта пчела летит к цветку со скоростью 2 единицы в секунду, независимо от того, далеко цветок или близко; без .normalized она летела бы тем быстрее, чем дальше находится цветок:

public Vector3 flower = new Vector3(4, 1, 3);
public float speed = 2f;

void Update()
{
    Vector3 toFlower = flower - transform.position;
    transform.position += toFlower.normalized * speed * Time.deltaTime;
}

Vector3.zero.normalized остаётся равным (0, 0, 0), поскольку у нуля нет направления. v.normalized оставляет v без изменений; v.Normalize() изменяет сам v.

challenge icon

Задание

Легко

Напиши перемещение персонажа. Стрелки (или WASD), считываемые с помощью необработанных осей, перемещают его влево и вправо по x и вверх и вниз по z. Он движется со скоростью speed единиц в секунду в любом направлении, в том числе по диагонали, сразу начинает движение и останавливается, а без нажатых клавиш остается на месте.

Нажми Play, пройдись прямо и по диагонали, затем нажми Check.

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

using UnityEngine;

public class Walker : MonoBehaviour
{
    public float speed = 4f;

    void Update()
    {
        // Стрелки или WASD: движение по осям x и z со скоростью speed, одинаковой и при движении по диагонали.
    }
}
quiz iconПроверьте себя

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

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