Controllare un mouse virtuale con un controller di gioco in Unity

Quando sviluppano giochi per Android per un'ampia gamma di fattori di forma, tra cui pieghevoli, tablet e schermi di grandi dimensioni, i giocatori spesso collegano controller o gamepad esterni. Per le schermate dell'interfaccia utente originariamente progettate per le interazioni touch o con il mouse, la navigazione nei menu con un controller può essere difficile.

Sebbene la riprogettazione dell'architettura dell'interfaccia utente basata sulla navigazione standard con il D-pad in genere offra una migliore esperienza utente, potrebbe non essere sempre fattibile per i progetti esistenti. In alternativa, Unity Input System fornisce il componente VirtualMouseInput. Questo componente ti consente di controllare un cursore software virtuale sullo schermo utilizzando un gamepad o un controller collegato.

Informazioni su VirtualMouseInput

Il componente VirtualMouseInput è un'utilità di alto livello nel pacchetto Unity Input System che collega gli input del gamepad al controllo del cursore sullo schermo, alle interazioni del puntatore dell'interfaccia utente e agli eventi del touchscreen simulati. Quando è attivo:

  • Crea un dispositivo mouse virtuale: registra un mouse simulato dal software in Unity Input System insieme a qualsiasi dispositivo di puntamento fisico.
  • Mappa i controlli del gamepad alle azioni del cursore: puoi associare le levette analogiche o i D-pad per spostare il cursore sullo schermo e mappare i pulsanti del controller (ad esempio il pulsante Sud / A) per simulare i clic del mouse sinistro, destro o centrale.
  • Si integra con l'interfaccia utente di Unity: grazie alla perfetta integrazione con InputSystemUIInputModule, gli elementi dell'interfaccia utente standard come pulsanti, interruttori e slider rispondono al cursore virtuale esattamente come farebbero a un mouse hardware o a un'interazione touch.
  • Controlla un cursore visivo: ti consente di assegnare un Graphic dell'interfaccia utente (ad esempio un componente Image) che traccia e visualizza automaticamente la posizione del cursore virtuale sullo schermo.

Combinare il mouse virtuale con TouchSimulation

Se il tuo gioco è stato originariamente progettato esclusivamente per i touchscreen e si basa su script o API touch diretti, un mouse virtuale non attiverà automaticamente la logica di rilevamento touch esistente perché viene registrato come dispositivo mouse anziché come dispositivo touchscreen.

Per supportare l'interazione del cursore tramite gamepad senza riscrivere il codice di gestione touch, puoi utilizzare la funzionalità di Unity Input System's TouchSimulation insieme a VirtualMouseInput:

  • Come funziona: quando è attivato tramite TouchSimulation.Enable(), Input System converte automaticamente i clic e i movimenti del puntatore da qualsiasi dispositivo mouse attivo, incluso il mouse simulato dal software creato da VirtualMouseInput, in eventi touchscreen simulati.
  • Flusso di dati risultante: le interazioni con la levetta e i pulsanti del gamepad controllano il mouse virtuale, che TouchSimulation traduce in eventi touch singoli (Touchscreen). Gli script di rilevamento touch esistenti possono elaborare questi eventi senza problemi senza modificare il codice.
  • Considerazioni: TouchSimulation è limitato all'emulazione del puntatore touch singolo. Se il gameplay si basa su gesti multi-touch complessi come il pinch-to-zoom o la rotazione con due dita, devi configurare associazioni di azioni di input dedicate per i controlli del gamepad.

Per dettagli tecnici completi, proprietà e documentazione sull'utilizzo, consulta i riferimenti agli script ufficiali UnityEngine.InputSystem.UI.VirtualMouseInput e UnityEngine.InputSystem.EnhancedTouch.TouchSimulation.