Окно Диспетчер ввода позволяет определить оси ввода и связанные с ними действия для вашего проекта. Чтобы получить к нему доступ, в главном меню Unity выберите Правка > Настройки проекта, затем выберите Диспетчер ввода на панели навигации справа.
Диспетчер ввода использует следующие типы элементов управления:
- Клавиша — это любая клавиша на физической клавиатуре, например W, Shift или пробел.
- Под кнопкой понимается любая кнопка на физическом контроллере (например, геймпадах), например кнопка X на контроллере Xbox One.
- Виртуальная ось (во множественном числе: оси) сопоставляется с элементом управления, например кнопкой или клавишей. Когда пользователь активирует элемент управления, ось получает значение в диапазоне [–1..1]. Вы можете использовать это значение в своих скриптахфрагмент кода, позволяющий создавать собственные компоненты, запускать игровые события, изменять компоненты свойства с течением времени и реагировать на пользовательский ввод любым удобным для вас способом. Подробнее
См. в Словарь.
Виртуальные оси
Каждый проект, который вы создаете, имеет ряд входных осей, созданных по умолчанию. Эти оси позволяют сразу использовать ввод с клавиатуры, мыши и джойстика в проекте.
Чтобы узнать больше об этих осях, откройте окно Диспетчер ввода и щелкните стрелку рядом с именем любой оси, чтобы развернуть ее свойства.
Каждая ось ввода имеет следующие свойства:
Свойства | Функция |
---|---|
Name | Имя оси. Вы можете использовать это для доступа к оси из скриптов. |
Descriptive Name, Descriptive Negative Name | Эти значения устарели и не работают. Раньше они отображались для пользователя на экране Rebind Controls при запуске, но этот экран также устарел. |
Negative Button, Positive Button | Элементы управления для перемещения оси в отрицательном и положительном направлении соответственно. Это могут быть клавиши на клавиатуре, кнопки на джойстике или мыши. |
Alt Negative Button, Alt Positive Button | Альтернативные элементы управления для перемещения оси в отрицательном и положительном направлении соответственно. |
Gravity | Скорость в единицах в секунду, с которой ось падает в нейтральное положение при отсутствии входных данных. |
Dead | Как далеко пользователь должен переместить аналоговый джойстик, прежде чем ваше приложение зарегистрирует движение. Во время выполнения ввод со всех аналоговых устройств, попадающих в этот диапазон, будет считаться нулевым. |
Sensitivity | Скорость в единицах в секунду, с которой ось будет двигаться к целевому значению. Это только для цифровых устройств. |
Snap | Если включено, значение оси будет сброшено до нуля при нажатии кнопки, соответствующей противоположному направлению.. |
Type | Тип ввода, который управляет осью. Выберите из этих значений:
- Клавиша или кнопка мыши |
Axis | Ось подключенного устройства, которое управляет этой осью. |
JoyNum | Подключенный джойстик, управляющий этой осью. Вы можете выбрать конкретный джойстик или запросить ввод со всех джойстиков. |
Значения оси могут быть:
- От –1 до 1 для джойстика и ввода с клавиатуры. Нейтральное положение для этих осей — 0. Некоторые типы элементов управления, например кнопки на клавиатуре, не чувствительны к интенсивности ввода, поэтому они не могут выдавать значения, отличные от –1, 0 или 1.
- Дельта мыши (насколько мышь переместилась в течение последнего кадра) для ввода с помощью мыши. Значения для осей ввода мыши могут быть больше 1 или меньше –1, когда пользователь быстро перемещает мышь.
Добавление, удаление и копирование виртуальных осей
Чтобы добавить виртуальную ось, увеличьте число в поле Размер. Это создает новую ось внизу списка. Новая ось копирует свойства предыдущей оси в списке.
Чтобы удалить виртуальную ось, вы можете:
- Уменьшите число в поле Размер. Это удалит последнюю ось в списке.
- Нажмите правой кнопкой мыши любую ось и выберите Удалить элемент массива.
Примечание. Это действие нельзя отменить.
Чтобы скопировать виртуальную ось, щелкните ее правой кнопкой мыши и выберите Дублировать элемент массива.
Сопоставление виртуальных осей с элементами управления
Чтобы сопоставить клавишу или кнопку с осью, введите ее имя в свойство Положительная кнопка или Отрицательная кнопка в Диспетчере ввода.
Названия ключей соответствуют следующим соглашениям об именах:
Key family | Соглашение об именовании |
---|---|
Letter keys |
a , b , c … |
Number keys |
1 , 2 , 3 … |
Arrow keys |
up , down , left , right
|
Numpad keys |
[1] , [2] , [3] , [+] , [equals] … |
Modifier keys |
right shift , left shift , right ctrl , left ctrl , right alt , left alt , right cmd , left cmd
|
Special keys |
backspace , tab , return , escape , space , delete , enter , insert , home , end , page up , page down
|
Function keys |
f1 , f2 , f3 … |
Кнопки мыши называются mouse 0, mouse 1, mouse 2
и т. д.
Кнопки джойстика имеют следующие соглашения об именах:
Происхождение кнопки | Соглашение об именовании |
---|---|
A specific button on any joystick |
joystick button 0 , joystick button 1 , joystick button 2 … |
A specific button on a specific joystick |
joystick 1 button 0 , joystick 1 button 1 , joystick 2 button 0 … |
Вы также можете запросить ввод для определенной клавиши или кнопки с помощью Input.GetKey
и соглашения об именах, указанные выше. Например:
Input.GetKey("a");
Еще один способ получить доступ к ключам — использовать перечисление KeyCode
.
Использование виртуальных осей в скриптах
Чтобы получить доступ к виртуальным осям из сценариев, вы можете использовать имя оси.
Например, чтобы запросить текущее значение горизонтальной оси и сохранить его в переменной, можно использовать Input. GetAxis
вот так:
float horizontalInput = Input.GetAxis("Horizontal");
Для осей, которые описывают событие, а не движение (например, стрельба из оружия в игре), используйте Input .GetButtonDown
вместо этого.
Если две или более осей имеют одинаковое имя, запрос возвращает ось с наибольшим абсолютным значением. Это позволяет присвоить имени оси более одного устройства ввода.
Например, вы можете создать две оси с именем Горизонтальная и назначить одну для ввода с клавиатуры, а другую — для ввода с помощью джойстика. Если пользователь использует джойстик, ввод осуществляется с джойстика, а ввод с клавиатуры невозможен. В противном случае ввод осуществляется с клавиатуры, а ввод с джойстика невозможен. Это позволяет вам написать один сценарий, охватывающий ввод с нескольких контроллеров.
Пример
Можно использовать данные из горизонтальной и вертикальной осей, а также transform.Translate
для перемещения GameObjectосновного объекта в Сцены Unity, которые могут представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
Просмотреть в Словарь в пространстве XZ (вперед, назад, влево или вправо) . Добавьте следующий код в метод update()
в скрипте, прикрепленном к игровому объекту, который вы хотите переместить:
float moveSpeed = 10;
//Define the speed at which the object moves.
float horizontalInput = Input.GetAxis("Horizontal");
//Get the value of the Horizontal input axis.
float verticalInput = Input.GetAxis("Vertical");
//Get the value of the Vertical input axis.
transform.Translate(new Vector3(horizontalInput, verticalInput, 0) * moveSpeed * Time.deltaTime);
//Move the object to XYZ coordinates defined as horizontalInput, 0, and verticalInput respectively.
Time.deltaTime
представляет время, прошедшее с момента последнего кадра. Умножение переменной moveSpeed
на Time.deltaTime
гарантирует, что GameObject будет двигаться с постоянной скоростью в каждом кадре.