Как пользоваться input manager в unity
Перейти к содержимому

Как пользоваться input manager в unity

  • автор:

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 это то, где вы можете задать различные оси ввода и игровые действия для своего проекта.

The 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 служат двум целям:

  • При скриптовании это позволит вам считывать значения с оси, посредством её имени
  • Это позволит игрокам вашей игры настроить управление на свой вкус

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *