Input менеджер
Окно Диспетчер ввода позволяет определить оси ввода и связанные с ними действия для вашего проекта. Чтобы получить к нему доступ, в главном меню 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 | Тип ввода, который управляет осью. Выберите из этих значений: |
— Клавиша или кнопка мыши
— Движение мыши
— Ось джойстика
Значения оси могут быть:
- От –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 и соглашения об именах, указанные выше. Например:
Еще один способ получить доступ к ключам — использовать перечисление 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 будет двигаться с постоянной скоростью в каждом кадре.
Новая система ввода в Unity.
Новая система ввода доступна с версии Unity 2019.1 и отличается повышенным удобством, гибкостью и богатыми возможностями настройки по сравнению с традиционным Input Manager. На этом вебинаре мы рассмотрим ключевые моменты практического использования новой системы ввода.
План вебинара:
1. Подключение и настройка пакета Input System.
2. Использование системы ввода для управления персонажем.
3. Управление с помощью XBox контроллера.
4. Преимущества новой системы и совместимость с legacy скриптами.
Целевая аудитория:
Данный вебинар рассчитан на людей, изучающих или имеющих опыт работы с Unity. Для понимания данного вебинара требуются базовые знания языка C#.
Покупай подписку с доступом ко всем курсам и сервисам
Библиотека современных IT знаний в удобном формате
Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.
- Все видеокурсы на 3 месяца
- Тестирование по 10 курсам
- Проверка 5 домашних заданий
- Консультация с тренером 30 мин
- Все видеокурсы на 6 месяцев
- Тестирование по 16 курсам
- Проверка 10 домашних заданий
- Консультация с тренером 60 мин
- Все видеокурсы на 1 год
- Тестирование по 24 курсам
- Проверка 20 домашних заданий
- Консультация с тренером 120 мин
Возможно ли в Unity Input Manager добавить UI Button?
Есть ли какая-то возможность в Unity добавить события получаемые из UI (например клик с кнопки) в стандартный Input Manager?
Отслеживать
задан 13 янв 2021 в 17:41
44 4 4 бронзовых знака
Можно поподробней пожалуйста, не совсем понятно, что имеется в виду?
13 янв 2021 в 17:49
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Нет, вы не можете сами добавлять события в стандартный Input Manager.
Вы можете написать wrapper к стандартному Input Manager который бы возвращал что-то что вам надо. (и этому wrapper ни кто не мешает внутри использовать Input.GetAxis ) или поискать asset который уже умеет так делать.
Хотя во многих ситуациях такие выкрутасы не нужны, вполне будет достаточно чего-то вроде:
using System; using UnityEngine; using Button = UnityEngine.UIElements.Button; public class Controller : MonoBehaviour < [SerializeField] private Button rightButton; private Direction direction = Direction.Undefined; //поле, кот. влияет на общий функционал private void Start() < rightButton.clicked += () =>< direction = Direction.Right;>; // изменение влияющей переменной на основе UI события > private void Update() < if (Input.GetAxis("Horizontal") >0) < direction = Direction.Right; // изменение влияющей переменной на основе InputManager >Move(); // вызов метода с общим функционалом > private void Move() // метод с общим функционалом < switch (direction) < case Direction.Up: throw new NotImplementedException(); case Direction.Down: throw new NotImplementedException(); case Direction.Left: throw new NotImplementedException(); case Direction.Right: throw new NotImplementedException(); case Direction.Undefined: throw new NotImplementedException(); default: throw new NotImplementedException(); >> > public enum Direction
Input Manager
Input Manager это то, где вы можете задать различные оси ввода и игровые действия для своего проекта.
To see the Input Manager choose: Edit > Project Settings > Input. Note that the Input clsss provides more details.
Свойства
Свойство: | Функция: |
---|---|
Axes | Содержит все оси ввода, определенные для текущего проекта: Size это количество различных осей ввода в проекте, Element 0, 1, … конкретные оси ввода, подлежащие модификации. |
Имя | Название оси в лаунчере игры (game launcher) и скриптах. |
Descriptive Name | Детальное определение функции Positive Button, которое отображается в лаунчере игры. |
Descriptive Negative Name | Детальное определение функции Negative Button, которое отображается в лаунчере игры. |
Negative Button | Кнопка, которая будет отражать отрицательные значения на оси. |
Positive Button | Кнопка, которая будет отражать положительные значения на оси. |
Alt Negative Button | Дополнительная кнопка, которая будет отражать отрицательные значения на оси. |
Alt Positive Button | Дополнительная кнопка, которая будет отражать положительные значения на оси. |
Gravity | Как быстро оси центрируются. Используйте только в случае, когда Type принимает значение key / mouse button. |
Dead | Любое положительное или отрицательное значение, по модулю меньшее заданного числа, будет зафиксировано как нуль. Полезно для джойстиков. |
Sensitivity | В случае ввода с клавиатуры, большее значение (на оси) будет соответствовать более быстрой реакции. Меньшее значение будет соответствовать более сглаженному. В случае мышки, значение будет увеличивать фактическое смещение мышки. |
Snap | Если включено, то при получении значения (с оси) с противоположным знаком оно будет сброшено к нулю. Используйте только в случае, когда Type принимает значение key / mouse button. |
Invert | Если включено, то инвертирует ось ввода. |
Тип | Для кнопок используйте Key / Mouse Button, для движения мышки или колесика мыши используйте Mouse Movement, для аналоговых осей джойстика используйте Joystick Axis, а если пользователь будет “дёргать” окошко используйте Window Movement. |
Axis | Ось ввода с устройств (джойстик, мышка, геймпад и др.). |
Joy Num | Какой джойстик используется. По умолчанию считывание производится со всех джойстиков. Используйте это только в случае считывания с осей и не используйте для кнопок. |
Детали
Все оси, которые вы настроили в Input Manager служат двум целям:
- При скриптовании это позволит вам считывать значения с оси, посредством её имени
- Это позволит игрокам вашей игры настроить управление на свой вкус
Все определенные оси будут представлены игроку в лаунчере игры, где игрок сможет увидеть имена осей, детальное описание осей и кнопки по умолчанию. Здесь игроки имеют возможность изменить любые кнопки, определенные на осях. Следовательно, лучше всего писать скрипты с использованием осей вместо отдельных кнопок, которые игрок может переназначить в вашей игре.