Menu
CoddyTech

Локальное и мировое пространство

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

У объекта есть собственные направления, как и направления мира. transform.forward указывает туда, куда направлен нос объекта (синяя стрелка в окне Scene в Unity), и задаётся как вектор мира длиной в одну единицу; transform.right и transform.up — это собственные направления вправо и вверх. Поверните объект — и они повернутся вместе с ним. Этот бумажный самолётик повёрнут на 90 градусов вокруг оси y в сцене, поэтому он летит вдоль оси x мира, туда, куда направлен:

public float speed = 4f;

void Update()
{
    transform.position += transform.forward * speed * Time.deltaTime;
}

transform.Translate(Vector3.forward * speed * Time.deltaTime) делает то же самое, потому что Translate интерпретирует свой вектор в системе координат объекта: в ней Vector3.forward означает направление вперёд объекта. Передайте Space.World вторым аргументом — и вместо этого будут использоваться оси мира, поэтому transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.World) перемещает объект вдоль оси z мира, куда бы ни был направлен самолётик.

transform.Rotate тоже поворачивает объект вокруг его собственных осей. Если смотреть сверху, положительный угол вокруг оси y поворачивает объект, стоящий вертикально, вправо, а отрицательный — влево, и его transform.forward поворачивается вместе с ним.

challenge icon

Задание

Легко

Задай танку управление как у танка: поворачивайся на месте, двигайся в направлении, куда он смотрит.

  1. В Update(), пока удерживается клавиша со стрелкой вправо, выполняй transform.Rotate(0, turn * Time.deltaTime, 0);, а для стрелки влево используй -turn.
  2. Пока удерживается клавиша со стрелкой вверх, выполняй transform.Translate(Vector3.forward * speed * Time.deltaTime);.

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

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

using UnityEngine;

public class Tank : MonoBehaviour
{
    public float speed = 3f;
    public float turn = 90f;

    void Update()
    {
        // Стрелки вправо/влево: поворачивать вокруг оси y. Стрелка вверх: ехать в направлении, куда направлен танк.
    }
}

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

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