Считывание осей
О чем ты узнаешь из видео:
✅Окно менеджера ввода
✅Потребность
✅Возвращение к старому коду
✅Вывод значения осей
✅Движение объекта вверх
На прошлом уроке, вы узнали, как реализовать движение объекта при нажатии на клавиши. Сегодня вы поймете как делать реализацию движения при помощи считывания осей.
В этом уроке будет много терминологии если вам нужна будет помощь в понимании термина - го в наш телеграмм канал, или вот ссылка на нашу книгу. Там все есть.
Окно менеджера ввода
Это окно позволяет определить нужные оси. Чтобы его открыть надо нажать в левой верхней части экрана кнопку `Edit` в нем выбрать опцию `ProjectSettings` и в открывшемся окне выбрать раздел `InputManager`. Там будет список всех осей: горизонтали, вертикали, выстрелов, ось движения подключенной мыши и тд.
Если речь идет про менеджер ввода в Unity, то под термином "ось" подразумевается или одна определенная клавиша или сразу их набор.
Когда удерживается соответствующий элемент управления, ось возвращает значение в диапазоне от -1 до 1 включительно. В настройках оси, можно увидеть клавиши, которые вернут исключительно положительные значения, а так же те есть те, которые вернут только отрицательные. Под сокращением alt buttons, подразумевается альтернативные (дополнительные) кнопки.
Потребность
Возможно сейчас у Вас появился резонный вопрос: а для чего в принципе нужно знать и использовать оси, если способ считывание клавиш, который мы разобрали на прошлом уроке, прекрасно работает.
Отвечаем:
В осях можно вызывать несколько клавиш сразу из одного места. К примеру, если мы рассмотрим первую ось "Horizontal", то мы увидим, что она повторяется чуть ниже, так как первая настройка относится к клавиатуре, а вторая - к геймпаду. И так же, в первой ее настройке указаны целых 4 различных клавиши.
Кроме того, благодаря осям можно получать значение от нажатия в диапазоне от {-1; 1}
В этом курсе мы будем использовать только оси Horizontal и Vertical для создания управления объектом. Нам не нужны все 30 осей которые имеются по умолчанию.
Давайте вернемся в проект и напишем перемещение объекта используя считывания осей.
Возвращение к старому коду
Итак откройте код с прошлого урока, и удалите весь код, который находится в методе Update. Почему? Ну, логика движения при помощи считывания осей, немного отличается от текущей, и она будет только мешать.
Вывод значения осей
Сперва, надо понять как считывать нужную ось.
Для этого, в методе Update следует вызвать метод GetAxis из класса Input, поставить круглые скобочки, и в них в виде строки записать имя нужной оси. Допустим это будет горизонтальная ось.
Метод GetAxis возвращает значение типа данных float и сперва давайте выведем это значение в консоль. Для этого поместим его в метод Log из класса Debug.
Сохраняем скрипт (Ctr+Shift+S), открываем Unity, запускаем проект в игровом режиме и в окне консоли видим значение 0, которое выводит каждый кадр. Но если зажать клавишу `A`, то это значение плавно перейдет от 0 к -1, а при отпускании этой клавиши оно снова вернется к 0. При зажатие клавиши `D`, происходит аналогичная ситуация только вместо отрицательного значения выводится положительное.
Движение объекта вверх
Вернемся в скрипт и теперь давайте приступим к реализации движения объекта.
Сперва сделаем изменение позиции только по оси X.
Для этого вместо вывода сообщения, сделаем переменную типа данных float, назовем ее moveX и приравняем ее к методу GetAxis из класса Input, в который в качестве аргумента, укажем ось горизонтали (то есть ту ось которую мы только что считывали).
Давайте сделаем так чтобы позиция увеличивалась или уменьшалась на значение этой переменной? Для этого домножим ее на скорость, и все это умножим на переменную Time.deltaTime.
Теперь, ниже обратимся к компоненту transform объекта. Возьмем у него позицию и приравняем ее к вектору. По оси X укажем текущее значение этой координаты увеличенную на переменную moveX, а по оси Y оставим текущее значение.
Теперь жмем горячие клавиши Ctr + Shift + S, откроем Unity и запустим проект в игровом режиме. У всех объект двигается влево и вправо при нажатии на нужные клавиши?
Как это работает
Снова вернемся в код.
Делаем смещение позиции объекта только по оси X на переменную moveX. Эта переменная, в свою очередь, равна произведению трех множителей.
Рассмотрим три ситуации:
1) когда ни одна клавиша не нажата: метод GetAxis вернет 0 и в результате значение переменной moveX будет равно 0. Следовательно объект будет смещаться на 0 единиц в секунду (стоять на одном месте).
2) когда зажата клавиша A: метод GetAxis вернет -1 и в результате значение переменной moveX будет равно отрицательному произведению скорости на deltaTime. Следовательно В ТЕКУЩЕМ КОНТЕКСТЕ, объект будет уменьшать свою позицию по иксу (двигаться влево).
3) когда зажата клавиша D: метод GetAxis вернет единицу. В результате значение переменной moveX будет равно положительному произведению скорости на deltaTime. Следовательно В ТЕКУЩЕМ КОНТЕКСТЕ, объект будет увеличивать свою позицию по X (двигаться вправо).
Сейчас надо дописать код, чтобы объект двигался еще и по оси Y.
Для этого делаем аналогичные действия: Создаем переменную moveY и в нее кладем значение из метода GetAxis по вертикальной оси и домножим это на скорость в секунду. Затем увеличиваем значение координаты Y на эту переменную.
Ctr + Shift + S, откроем Unity, запустим проект в игровом режиме: объект двигается влево и вправо, вниз и вверх при нажатии на нужные клавиши.
Домашнее задание:
Сделать движения двух объектов используя эту реализацию, только нужно сделать так, чтобы один объект двигался в противоположную сторону от другого объект. То есть если один объект двигается вниз, то второй двигается вверх и наоборот. Пример готового задания можно посмотреть в видео ниже.
Если вдруг вы не знаете как сделать упражнение или у вас возникнет проблема - можно найти проект с готовым решением по ссылке.
А на этом, урок подошел к концу, пожалуйста не забудьте оценить этот урок лайком и подписаться.