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 и посмотрите на свою первую маленькую игру в действии!
Попробуйте нажимать клавиши со стрелками и перемещаться. Чтобы остановить игру, просто снова нажмите «Играть». Вы даже можете регулировать скорость в реальном времени, чтобы вам не приходилось все время останавливаться и запускать ее.
В следующем уроке мы узнаем о твердых телах и столкновениях.