Unity - базовый сценарий движения

В этом уроке мы напишем код, который заставляет gameObject перемещаться вверх, вниз, влево и вправо в зависимости от ввода пользователя. Это должно помочь нам легче понять рабочий процесс сценариев Unity.

Помните, что каждый GameObject имеет хотя бы один компонент - Transform. Что особенного, так это то, что Transform объекта gameObject также отображается как переменные в скриптовой стороне Unity, поэтому мы можем изменять его с помощью кода. Это также не ограничивается преобразованием; все компоненты в Unity имеют свойства, которые доступны через переменные в сценариях.

Начнем со сценария движения. Создайте новый сценарий и назовите его «Движение».

Теперь откройте сценарий, и вы должны увидеть то же самое, что видели на прошлом уроке.

Давайте создадим общедоступную переменную типа float с именем speed. Создание переменнойpublic в Unity есть большое преимущество -

  • Переменная отображается в редакторе как изменяемое поле, поэтому вам не нужно вручную настраивать значения в коде.

public class Movement : MonoBehaviour {
   public float speed;
}

Если мы сохраним этот скрипт, не касаясь других методов, он должен скомпилироваться в Unity.

(Вы можете увидеть, когда он компилируется, по

значку в правом нижнем углу.)

Следующий, drag and dropскрипт из Assets в GameObject. Если вы сделаете это правильно, в свойствах GameObject вы должны увидеть следующее:

Поскольку значение скорости регулируется и не требует постоянного изменения кода, мы можем использовать метод update () вместо start ().

Давайте теперь рассмотрим цели метода обновления -

  • Проверьте ввод данных пользователем.

  • Если есть пользовательский ввод, прочтите направления ввода.

  • Измените значения положения преобразования объекта в зависимости от его скорости и направления. Для этого мы добавим следующий код -

void Update() {
   float h = Input.GetAxisRaw(“Horizontal”);
   float v = Input.GetAxisRaw(“Vertical”);
   
   gameObject.transform.position = new Vector2 (transform.position.x + (h * speed), 
      transform.position.y + (v * speed));

Давайте теперь обсудим код вкратце.

Прежде всего, мы создаем переменную с плавающей запятой с именем h (для горизонтали), а его значение определяется Input.GetAxisRawметод. Этот метод возвращает -1, 0 или 1 в зависимости от того, какую клавишу игрок нажал на стрелках вверх / вниз / влево / вправо.

Класс Input отвечает за получение ввода от пользователя в виде нажатия клавиш, ввода с помощью мыши, ввода с контроллера и т. Д. Метод GetAxisRaw немного сложнее понять, поэтому мы вернемся к нему позже.

Далее мы updating позиция нашего gameObject в новую позицию, определенную путем создания нового Vector2. Vector2 принимает 2 параметра, которые являются егоx and yзначения соответственно. Для значения x мы предоставляем суммуcurrent положение и его speed, эффективно добавляя некоторую величину к каждому кадру, когда клавиша нажимается на ее позицию.

Сохраните этот скрипт и вернитесь в Unity. Unity автоматически обновит все скрипты после успешной компиляции, поэтому вам не придется повторно подключать скрипт снова и снова.

Теперь, когда вы закончили, измените значение speedв свойствах GameObject, чтобы указать 0.8. Это важно, потому что более высокое значение заставит игрока двигаться слишком быстро.

Теперь нажмите Play и посмотрите на свою первую маленькую игру в действии!

Попробуйте нажимать клавиши со стрелками и перемещаться. Чтобы остановить игру, просто снова нажмите «Играть». Вы даже можете регулировать скорость в реальном времени, чтобы вам не приходилось все время останавливаться и запускать ее.

В следующем уроке мы узнаем о твердых телах и столкновениях.