Изменение изображения зависит от ввода, такого как клавиатура или геймпад Xbox в Unity с новой системой ввода.
Очень приятно иметь трюк в игре, и иногда он помогает игроку больше проникнуться игрой. Мне очень нравится что-то подобное.
Один из них — изменить изображение кнопки, когда игрок использует другой ввод. Например.,
- При использовании Keyboard изображение будет Keycap (E).
- Но при использовании Xbox Controller изображением будет Кнопка (X).
Вот пример:
Требование
Для начала я использую эту спецификацию для этой статьи:
- Единство 2020.3.20f1
- Пакет Unity Новая система ввода 1.44
- *Пакет OdinSerializer (для редактирования)
Может также работать более новая версия Unity или система ввода.
*OdinSerializer не является обязательным. Мы будем использовать его в этой статье, так как он будет использоваться для редактирования Словаря из Редактора. Вы также можете использовать другую альтернативную карту, такую как список или массив.
Концепция решения
Мы будем использовать новую систему ввода для обнаружения ввода. Мы сравним, какой это тип ввода. И, наконец, мы уведомляем остальных, чтобы они изменили спрайт.
Я использую более общий вариант: мы изменим GameObject со Sprite в немвместо Sprite напрямую, потому что это более удобно для последующего использования.
Идея заключается в том, что мы зарегистрируем слушателя в новой системе ввода, получим обратный вызов и узнаем, какой контроллер используется. Затем мы отправляем/вызываем наш обработчик, чтобы соответствующим образом изменить спрайт.
Использование системы ввода
Прежде всего, нам нужно убедиться, что проект использует новую систему ввода Unity. Если нет, нам нужно установить систему ввода из Диспетчера пакетов и включить ее в Настройках проигрывателя. Вы можете следовать руководству в Документации Unity.
Убедитесь, что компонент PlayerInput в EventSystem подключен, или вы можете добавить его вручную. Мы будем использовать этот компонент для регистрации слушателя.
Подготовьте прослушиватель, ввод при изменении управления (когда поступает новый ввод, он обрабатывает и классифицирует используемый контроллер)
Поэтому нам нужно создать скрипт, который регистрирует слушателя в PlayerInput и обработчик при обнаружении нового ввода.
Как вы можете видеть, ActiveInputType SetActiveInputType()
— это функция для обработки того, какой элемент управления используется, и преобразования или классификации в ваш собственный зарегистрированный элемент управления.
После классификации onControlsChanged.Invoke(currentInputType);
отправит результат всем нашим Switcher, зарегистрированным в нашем GameObject.
Это будет выглядеть так, как в инспекторе, мы можем отладить, какой текущий тип ввода используется.
Подготовить прослушиватель событий (для обработки спрайта)
Теперь нам нужно создать еще один скрипт для коммутатора. Здесь я буду использовать Dictionary mapSwitchers
заливки с картой Input и GameObject. Итак, когда клавиатура активна, она включит назначенную клавиатуру GameObject.
OnEnable
и OnDisable
будут регистрировать нашего слушателя в наших действиях `ControlChanges
`. Таким образом, при изменении нового ввода он активирует функцию swutchOnControlChanged
. И в этой функции мы отключаем или активируем наш отображаемый игровой объект соответственно.
Здесь пример в инспекторе выглядит так
Готово. Теперь вам просто нужно применить свой игровой объект соответственно тому, что будет отображаться при использовании клавиатуры или контроллера Xbox.
Подробнее Далее!!!
С помощью этой настройки вы можете добавить дополнительные параметры для другого геймпада или контроллера, например Touch, Nintendo Switch, PS или другого.
В этой функции SetActiveInputType()
вы можете добавить больше if-else (или изменить регистр для меньшей сложности) и проверить ввод. Многие контроллеры поддерживаются Unity, например Dualshock PS4, Nintendo Switch или Touch.
Бонус
Вот пример, реализованный в моей игре
продолжай и твори!