Найти тему

Перевод Официального курса Unity. Урок 1. Часть 4.

В данном уроке мы рассмотрим четвертую часть, первого Официального урока по Unity.

В этом уроке мы допишем скрипт на C# и автомобиль реагировать на нажатие игрока, а не на самостоятельное движение.

До сих пор транспортное средство могло двигаться только прямо вперед по дороге. Нам нужно, чтобы он мог двигаться влево и вправо, чтобы избежать препятствий. Для начала в откройте скрипт "PlayerController" и добавьте новую публичную переменную, которая будет отвечать за скорость поворота нашего транспорта. В методе "Update" добавьте код с нашей новой переменной. Пример кода:

  • public class PlayerController : MonoBehaviour
    {
    public float speed = 15f;
    public float turnSpeed;

    void Update()
    {
    transform.Translate(Vector3.forward * speed * Time.deltaTime);
    transform.Translate(Vector3.right * turnSpeed * Time.deltaTime);
    }
    }
Добавляем возможность объезжать препятствия
Добавляем возможность объезжать препятствия

Сохраняем скрипт, выбираем наш автомобиль и в окне "Inspector" в нашем скрипте видим, что добавилось поле "Turn Speed". Запускаем нашу сцену и когда машина едет меняем значения в поле "Turn Speed". Видим, что наш автомобиль от изменения значений меняет траекторию своего движения, но мы так же видим, что автомобиль не поворачивает, а смещается относительно своего движения. Для того чтобы это исправить, нам необходимо обратится к компоненту "Transform" в поле "Rotation". Для того, чтобы обратится в поле "Rotation", мы изменим в нашем скрипте слово Translate на Rotate и изменим Vector3.right на Vector3.up. после того как мы изменим скрипт он должен выглядеть следующим образом:

  • public class PlayerController : MonoBehaviour
    {
    public float speed = 15f;
    public float turnSpeed;

    void Update()
    {
    transform.Translate(Vector3.forward * speed * Time.deltaTime);
    transform.Rotate(Vector3.up * turnSpeed * Time.deltaTime);
    }
    }
Добавляем поворот автомобилю, а не скольжение
Добавляем поворот автомобилю, а не скольжение

После изменения и сохранения скрипта, пробуем запустить нашу сцену и меняем поле "Turn Speed", после чего видим, что наш автомобиль начал поворачиваться.

После того как мы научили наш автомобиль поворачиваться, добавим ему возможность делать это на нажатия клавиш. Для того, чтобы добавить нажатия клавиш, мы создадим 2 новых переменных и назовем их "horizontalInput" и "forwardInput". Сделаем их приватными. Скрипт с новыми переменными будет выглядеть вот так:

  • public class PlayerController : MonoBehaviour
    {
    public float speed = 15f;
    public float turnSpeed;
    private float horizontalInput;
    private float forwardInput;

    void Update()
    {
    transform.Translate(Vector3.forward * speed * Time.deltaTime);
    transform.Rotate(Vector3.up * turnSpeed * Time.deltaTime);
    }
    }
Добавили новые переменные
Добавили новые переменные

После того как мы создали новые переменные, их необходимо назначить. Для этого в методе "Update" пишем строки:

horizontalInput = Input.GetAxis("Horizontal");
forwardInput = Input.GetAxis("Vertical");

Появляется логичный вопрос, почему мы пишем в кавычках слова Horizontal и Vertical ведь если мы напишем, что-то другое работать ничего не будет! Но таким образом мы задаем систему ввода которая встроена в Unity. Чтобы узнать в каком разделе, какие клавиши находятся, нужно в нашем проекте нажать кнопку "Edit" и открыть "Project Setting", далее выбираем пункт "Input Manager" и открывает вкладку "Axes". Здесь мы и видим то, что мы вписывали в наш скрипт и за какие клавиши отвечают Horizontal и Vertical.

Нам нужно чтобы наши переменные влияли на скорость автомобиля, а так же на его разворот. Для этого просто добавляем их в исполнение. Код выглядит так:

  • public class PlayerController : MonoBehaviour
    {
    public float speed = 15f;
    public float turnSpeed;
    private float horizontalInput;
    private float forwardInput;

    void Update()
    {
    horizontalInput = Input.GetAxis("Horizontal");
    forwardInput = Input.GetAxis("Vertical");
    transform.Translate(Vector3.forward * speed * Time.deltaTime * forwardInput);
    transform.Rotate(Vector3.up * turnSpeed * Time.deltaTime * horizontalInput);
    }
    }
Дописали наш скрипт
Дописали наш скрипт

Теперь устанавливаем "Turn Speed" в "Inspector" на 20. Запускаем нашу сцену и видим, что теперь наш автомобиль разгоняется и поворачивается, только от нажатия клавиш.

Поворачиваем и едем.
Поворачиваем и едем.

В следующем уроке мы сделаем: пирамиды препятствий, встречный транспорт, переключение камеры и локальный мультиплеер.

На этом урок подошел к концу. Увидимся в следующем уроке.