Менеджер ввода
| Важно: Менеджер ввода является устаревшей функцией и не рекомендуется для новых проектов. Для новых проектов вы должны использовать пакет Input System. |
Окно Менеджер ввода позволяет определить оси ввода и связанные с ними действия для вашего Project. Чтобы получить доступ к нему, в главном меню Unity перейдите в Edit > Project Settings, а затем выберите Менеджер ввода из навигационной панели справа.
Диспетчер ввода использует следующие типы элементов управления:
- Клавиша относится к любой клавише на физической клавиатуре, такой как W, Shift или пробел.
- Кнопка относится к любой кнопке на физическом контроллере (например, на геймпадах), например к кнопке X на пульте дистанционного управления.
- A virtual axis (множественное число: оси) сопоставляется с элементом управления, таким как кнопка или клавишная комбинация. Когда пользователь активирует элемент управления, ось получает значение в диапазоне [–1..1]. Вы можете использовать это значение в своих скриптах.
Физические ключи
Параметр Физические клавиши позволяет сопоставлять коды клавиш с физической раскладкой клавиатуры, а не с языковой раскладкой, которая может отличаться у пользователей в разных регионах.
Например, на некоторых клавиатурах первый ряд букв читается “QWERTY”, а на других “AZERTY”. Это означает, что если вы создали скрипт для использования хорошо известных клавиш “WASD” для перемещения, они не будут в правильном физическом расположении (как клавиши со стрелками) на раскладке клавиатуры AZERTY.
При включенных физических клавишах, Unity использует общий ANSI/ISO “Qwerty” раскладку для представления физического расположения клавиш независимо от фактической раскладки пользователя. Это означает, что если вы указываете клавишу “Q”, она всегда будет крайней левой буквой на первом ряду буквенных клавиш, даже если на клавиатуре пользователя есть другая буква в этом положении.
Обратите внимание, что вы не должны читать ввод клавиши для ввода текста в игре, потому что это не позволит пользователям вводить не латинские символы. Вместо этого используйте Input.compositionString.
Виртуальные оси
Каждый Project, который вы создаете, имеет несколько осей ввода, созданных по умолчанию. Эти оси позволяют вам сразу же использовать клавиатуру, мышь и джойстик в вашем Project.
Чтобы узнать больше об этих осях, откройте окно Менеджер ввода и щелкните стрелку рядом с названием любой оси, чтобы раскрыть ее свойства.
Каждая входная ось имеет следующие свойства:
| Свойство | Функция |
|---|---|
| Имя | Имя оси. Вы можете использовать это для доступа к оси из скриптов. |
| Описательное название, описательное отрицательное название | Эти значения устарели и не работают. Ранее они отображались пользователю на экране «Управление перегруппировкой» при запуске, но этот экран также устарел. |
| отрицательная кнопка, положительная кнопка | Органы управления для нажатия на ось в отрицательном и положительном направлении соответственно. Это могут быть клавиши на клавиатуре, или кнопки на джойстике или мыши. |
| Alt отрицательная кнопка, Alt положительная кнопка | Альтернативные органы управления для нажима оси в отрицательном и положительном направлении соответственно. |
| Гравитация | Скорость в единицах в секунду, с которой ось падает в нейтральное положение при отсутствии ввода. |
| Мертвые | Насколько далеко пользователь должен переместить аналоговый джойстик, чтобы приложение зарегистрировало это движение. Во время выполнения ввод от всех аналоговых устройств, находящихся в этом диапазоне, будет считаться нулевым. |
| Чувствительность | Скорость в единицах в секунду, с которой ось будет двигаться к целевому значению. Это только для цифровых устройств. |
| Снап | Если включена, значение оси будет сброшено до нуля при нажатии кнопки, соответствующей противоположному направлению. |
| Тип | Тип входа, который управляет осью. Выберите из следующих значений: - Клавиша или кнопка мыши - Движение мыши - Ось джойстика |
| Ось | Ось подключенного устройства, которое управляет этой осью. |
| JoyNum | Подключенный джойстик, который управляет этой осью. Вы можете выбрать конкретный джойстик или запросить ввод от всех джойстик. |
Значения осей могут быть:
- Между -1 и 1 для джойстика и клавиатуры. Нейтральное положение для этих осей 0. Некоторые типы управления, такие как кнопки на клавиатуре, не чувствительны к интенсивности ввода, поэтому они не могут производить значения, кроме -1, 0 или 1.
- Дельта мыши (насколько мышка переместилась за последний кадр) для ввода мыши. Значения для осей ввода мыши могут быть больше 1 или меньше -1, когда пользователь быстро перемещает мышь.
Добавление, удаление и копирование виртуальных осей
Чтобы добавить виртуальную ось, увеличьте число в Размер поле. Это создает новую ось в нижней части списка. Новая ось копирует свойства предыдущей оси в списке.
Чтобы удалить виртуальную ось, можно:
- Уменьшите число в поле Размер. Это удалит последнюю ось из списка.
- Щелкните правой кнопкой мыши любую ось и выберите Удалить элемент массива.
Примечание: Вы не можете отменить это действие.
Чтобы скопировать виртуальную ось, щёлкните по ней правой кнопкой мыши и выберите Дублирование элемента массива.
Привязка виртуальных осей к элементам управления
Чтобы отобразить ключ или кнопку на оси, введите его имя в свойство Положительная Кнопка или Отрицательная Кнопка в Менеджере Ввода.
Имена ключей соответствуют следующим правилам присвоения имен:
| семейство ключей | Соглашение о названии |
|---|---|
| Буквенные клавиши | a, b, c… |
| Цифровые клавиши | 1, 2, 3… |
| Стрелки | up, down, left, right |
| Цифровая клавиатура | [1], [2], [3], [+], [equals]… |
| Клавиши модификатора | right shift, left shift, right ctrl, left ctrl, right alt, left alt, right cmd, left cmd |
| Специальные клавиши | backspace, tab, return, escape, space, delete, enter, insert, home, end, page up, page down |
| Функциональные клавиши | f1, f2, f3… |
Кнопки мыши называются mouse 0, mouse 1, mouse 2, и так далее.
Кнопки джойстика имеют следующие названия:
| Кнопка происхождения | Соглашение о названии |
|---|---|
| Конкретная кнопка на любом джойстике | joystick button 0, joystick button 1, joystick button 2… |
| Конкретная кнопка на конкретном джойстике | 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 вместо этого.
Если две или более осей имеют одно и то же имя, то запрос возвращает ось с наибольшим абсолютным значением. Это позволяет назначить более одного устройства ввода к имени оси.
Например, вы можете создать две оси с названием Горизонтальная и назначить одну для ввода с клавиатуры, а другую для ввода с джойстика. Если пользователь использует джойстик, ввод происходит с джойстика, и ввод с клавиатуры является нулевым. В противном случае ввод происходит с клавиатуры, а ввод с джойстика является нулевым. Это позволяет вам написать один скрипт, охватывающий ввод с нескольких контроллеров.
Пример
Для перемещения GameObject в пространстве XZ (вперёд, назад, влево или вправо) можно использовать ввод из осей Горизонтальная и Вертикальная и методов transform.Translate. Добавьте следующий код к методу update() в скрипте, прикрепленном к GameObject, который вы хотите переместить:
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 движется с постоянной скоростью каждый кадр.
InputManager