Найти тему

Unity 2D. Ruby's Adventure. Part 3

Теперь пришло время написать первый скрипт и добавить движения персонажу Ruby!

Скрипты в Unity скрипты — это компоненты, которые мы можем добавлять и удалять. Скриптов у объекта может быть несколько и каждый скрипт будет задавать ему какие-то определенные свойства и возможности. Например, один скрипт будет отвечать за здоровье персонажа, другой за его перемещение, третий за взаимодействие с другими персонажами и так далее...

Вы просто добавляете скрипт в инспекторе игрового объекта, и любое поведение, которое вы запрограммируете в этом скрипте, будет применено к этому игровому объекту.

Чтобы создать скрипт персонажу выберите его в окне иерархии и в справа в окне Инспектора нажмите кнопку "Add Component". В поисковой строке наберите "script" и выберите из предложенных вариантов списка пункт "New script":

Создание скрипта
Создание скрипта

Далее введите название скрипта - RubyController:

Создание скрипта
Создание скрипта

В окне Инспектора появится новый компонент RubyController, а в окне Проекта вы увидите новый файл скрипта:

Создание скрипта
Создание скрипта

Чтобы открыть скрипт нужно кликнуть два раза по полю с названием скрипта в компоненте (на скрине отмечено красной галочкой) или по файлу скрипта в окне Проекта. Откроем скрипт в среде Microsoft Visual Studio. Вы можете использовать другую среду для написания кода, содержимое скрипта все равно будет абсолютно одинаковым:

Скрипт персонажа
Скрипт персонажа

Кратко напомню структуру скрипта. Строки 1 - 3 сообщают нам об используемых библиотеках. Строки 5 - 18 содержат код нашего компонента, а точнее класса с названием RubyController. Внутри класса определены два метода:

  • Start() - Unity выполняет код внутри Start только один раз при запуске игры;
  • Update() - Unity выполняет код внутри Update каждый кадр. В игре (так же, как и в мультфильмах) используются неподвижные изображения, которые демонстрируются с высокой скоростью. Обычно в играх за одну секунду отображается 30 или 60 изображений. Каждое из этих изображений называется кадром . Перед созданием этого образа Unity выполняет код, написанный в функции Update для всех игровых объектов на сцене.

Чтобы заставить персонажа перемещаться необходимо изменять его позицию, то есть координаты в компоненте Transform. Для этого заведем переменную, в которую сохраним текущее значение координат:

Vector2 position = transform.position;

Переменные — это место в памяти вашего компьютера, которому вы даете имя. Позже вы можете использовать это имя для извлечения значения, которое вы там сохранили. В нашем случае имя - position, а значение - transform.position.

Vector2 — это тип данных, который хранит две координаты - x и y, в привычном нам виде. Например, координаты точки (2, 5), где 2 - это значение координаты x, а 5 - координаты y.

Теперь давайте переместим персонажа немного вправо по горизонтали, то есть по оси x:

position.x = position.x + 0.1f;

Оси имеют направление как в математике - ось X направлена вправо, ось Y вверх. Поэтому, когда мы увеличиваем координату x, то персонаж будет перемещаться вправо. Если мы будем уменьшать координату X, то персонаж будет перемещаться влево. Аналогично для оси Y.

Теперь, когда у вас есть новый результат, вам нужно вернуть его компоненту Transform персонажа, чтобы он знал, что нужно переместить игровой объект на 0.1 вправо:

transform.position = position;

Unity выполняет эту функцию для каждого нового кадра, поэтому ваш объект будет перемещаться на 0.1 единицу вправо в каждом новом кадре по сравнению с предыдущим. Это создает иллюзию непрерывного движения игрового объекта вправо.

Вот что должно получиться в скрипте:

Скрипт персонажа
Скрипт персонажа

Проверьте себя - запустите игру, нажав в Unity на кнопку запуска игры по центру. Убедитесь, что персонаж "убегает" вправо:

Вы создали скрипт для перемещения Ruby. Теперь давайте настроим его так, чтобы движение приводилось в действие нажатием клавиши на клавиатуре.

Вместо постоянного добавления 0.1 к координате X в каждом кадре, нужно добавлять только в том случае, если игрок нажимает клавишу со стрелкой вправо на своей клавиатуре. Когда игрок нажимает клавишу со стрелкой влево, необходимо отнять 0.1 , чтобы объект сместился влево.

Давайте начнем с просмотра настроек ввода по умолчанию , которые определяют, какой тип ввода использует ваша игра:

Зайдите в меню Edit и выберите пункт Project Settings:

Настройки проекта
Настройки проекта

В открывшемся окне выберите пункт Input Manager, где перечислены значения осей для всех элементов управления вводом. Значения варьируются от -1 до 1 , в зависимости от того, что делает игрок.

Например, для джойстика на геймпаде горизонтальная ось может быть установлена ​​на:

  • -1 когда стик слева
  • 0 когда он посередине
  • 1 когда справа

Для клавиш клавиатуры ось определяется двумя клавишами:

  • Отрицательная клавиша, которая устанавливает ось на -1 при нажатии
  • Положительная клавиша, которая устанавливает ее в 1 при нажатии

Если вы посмотрите на горизонтальную ось, вы увидите, что лево (клавиша со стрелкой влево) находится на отрицательной кнопке , а право (стрелка вправо) — на положительной кнопке:

Управление вводом
Управление вводом

Давайте добавим использование элементов управления в код.

Для этого давайте определим новую переменную, в которую сохраним значение ввода по горизонтальной оси:

float horizontal = Input.GetAxis("Horizontal");

Метод Input.GetAxis возвращает значение от -1 до 1 в зависимости от того. какую клавишу нажал игрок.

Теперь умножим наше постоянное перемещение на 0.1 на это значение пользовательского ввода:

position.x = position.x + 0.1f * horizontal;

Получается, что когда игрок не нажимает клавиши перемещения, значение переменной horizontal равно нулю. Соответственно значение position.x никак не изменится. Если игрок нажмет клавишу влево, значение переменной horizontal будет равно -1, тогда position.x уменьшится на 0.1 и персонаж сместится влево. Если игрок нажмет клавишу вправо, значение переменной horizontal будет равно 1, тогда position.x увеличится на 0.1 и персонаж сместится вправо.

Проверьте код:

Скрипт персонажа
Скрипт персонажа

И проверьте, что получилось в игре, Ruby должен перемещаться только когда мы нажимаем клавиши стрелок влево или вправо:

Самостоятельно попробуйте реализовать перемещение персонажа вверх и вниз.

А затем проверьте себя:

Скрипт персонажа
Скрипт персонажа