Управляйте виртуальной мышью с помощью игрового контроллера в Unity.

При разработке игр для Android, предназначенных для широкого спектра форм-факторов, включая складные устройства, планшеты и устройства с большими экранами, игроки часто подключают внешние контроллеры или геймпады. Для пользовательских интерфейсов, изначально разработанных для сенсорного управления или управления мышью, навигация по меню с помощью контроллера может быть затруднительной.

Хотя перепроектирование архитектуры пользовательского интерфейса с использованием стандартной навигации с помощью D-pad обычно обеспечивает лучший пользовательский опыт, это не всегда осуществимо для существующих проектов. В качестве альтернативы, система ввода Unity предоставляет компонент VirtualMouseInput . Этот компонент позволяет управлять виртуальным экранным программным курсором с помощью подключенного геймпада или контроллера.

О программе VirtualMouseInput

Компонент VirtualMouseInput — это высокоуровневая утилита из пакета Unity Input System, которая связывает ввод с геймпада с управлением курсором на экране, взаимодействием с указателем пользовательского интерфейса и имитацией событий сенсорного экрана. В активном состоянии он:

  • Создает виртуальное устройство мыши: регистрирует программно имитированную мышь в системе ввода Unity наряду с любыми физическими указывающими устройствами.
  • Назначайте управление геймпадом на действия курсора: вы можете привязать аналоговые стики или крестовину для перемещения курсора по экрану, а кнопки контроллера (например, кнопка «Юг» / «A») — для имитации щелчков левой, правой или средней кнопкой мыши.
  • Интеграция с Unity UI: Благодаря бесшовной работе с модулем InputSystemUIInputModule , стандартные элементы пользовательского интерфейса, такие как кнопки, переключатели и ползунки, реагируют на виртуальный курсор точно так же, как на аппаратную мышь или сенсорное взаимодействие.
  • Управляет визуальным курсором: позволяет назначить Graphic пользовательского интерфейса (например, компонент « Image »), который автоматически отслеживает и отображает положение виртуального курсора на экране.

Сочетание виртуальной мыши и симуляции касания

Если ваша игра изначально разрабатывалась исключительно для сенсорных экранов и использует скрипты или API для прямого распознавания касаний, виртуальная мышь не будет автоматически запускать существующую логику определения касаний, поскольку она регистрируется как устройство мыши, а не как устройство сенсорного экрана.

Для поддержки взаимодействия курсора с помощью геймпада без переписывания устаревшего кода обработки сенсорного ввода можно использовать функцию TouchSimulation системы ввода Unity совместно с VirtualMouseInput :

  • Принцип работы: При включении с помощью TouchSimulation.Enable() система ввода автоматически преобразует щелчки и движения указателя с любого активного устройства мыши, включая программно имитированную мышь, созданную VirtualMouseInput , в имитированные события сенсорного экрана.
  • Последовательность обработки данных: взаимодействие джойстика и кнопок геймпада управляет виртуальной мышью, которую TouchSimulation затем преобразует в события одиночного касания ( Touchscreen ). Ваши существующие скрипты обнаружения касаний могут обрабатывать эти события без каких-либо изменений в коде.
  • Важные замечания: TouchSimulation ограничена эмуляцией указателя одним касанием. Если в вашем игровом процессе используются сложные жесты с несколькими касаниями, такие как масштабирование двумя пальцами или вращение двумя пальцами, необходимо настроить отдельные привязки действий ввода для элементов управления геймпада.

Полную техническую информацию, сведения о свойствах и документации по использованию см. в официальных справочниках по скриптам UnityEngine.InputSystem.UI.VirtualMouseInput и UnityEngine.InputSystem.EnhancedTouch.TouchSimulation .