Controlar um mouse virtual com um controle de jogo no Unity

Ao desenvolver jogos Android para uma ampla variedade de formatos, incluindo dobráveis, tablets e telas grandes, os jogadores costumam conectar controles externos ou gamepads. Para telas de interface projetadas originalmente para interações por toque ou mouse, navegar pelos menus com um controle pode ser desafiador.

Embora a reformulação da arquitetura da interface com base na navegação padrão do botão direcional geralmente ofereça uma experiência melhor ao usuário, nem sempre é possível fazer isso em projetos atuais. Como opção alternativa, o Unity Input System oferece o VirtualMouseInput componente. Esse componente permite acionar um cursor de software virtual na tela usando um gamepad ou controle conectado.

Sobre o VirtualMouseInput

O componente VirtualMouseInput é um utilitário de alto nível no pacote do Unity Input System que conecta entradas de gamepad ao controle do cursor na tela, interações do ponteiro da interface e eventos simulados de tela touchscreen. Quando ativo, ele:

  • Cria um dispositivo de mouse virtual:registra um mouse simulado por software no Unity Input System junto com qualquer dispositivo apontador físico.
  • Mapeia os controles do gamepad para ações do cursor:é possível vincular controles analógicos ou D-pads para mover o cursor pela tela e mapear botões do controle (como o botão Sul / A) para simular cliques esquerdo, direito ou do meio do mouse.
  • Integra-se à interface do Unity:ao trabalhar perfeitamente com o InputSystemUIInputModule, elementos de interface padrão, como botões, alternâncias e controles deslizantes, respondem ao cursor virtual exatamente como fariam a um mouse de hardware ou interação por toque.
  • Aciona um cursor visual:permite atribuir um Graphic da interface (como um componente Image) que rastreia e renderiza automaticamente a posição do cursor virtual na tela.

Combinar o mouse virtual com o TouchSimulation

Se o jogo foi projetado originalmente apenas para telas touchscreen e depende de scripts ou APIs de toque direto, um mouse virtual não vai acionar automaticamente a lógica de detecção de toque atual, porque ele é registrado como um dispositivo de mouse, e não como uma tela touchscreen.

Para oferecer suporte à interação do cursor controlado pelo gamepad sem reescrever o código de processamento de toque legado, use o recurso TouchSimulation do Unity Input System junto com VirtualMouseInput:

  • Como funciona:quando ativado usando TouchSimulation.Enable(), o Input System converte automaticamente cliques e movimentos do ponteiro de qualquer dispositivo de mouse ativo, incluindo o mouse simulado por software criado por VirtualMouseInput, em eventos simulados de tela touchscreen.
  • Fluxo de dados resultante:as interações do botão e do controle do gamepad acionam o mouse virtual, que o TouchSimulation traduz em eventos de toque único (Touchscreen). Os scripts de detecção de toque atuais podem processar esses eventos perfeitamente sem modificação de código.
  • Considerações:TouchSimulation é limitado à emulação de ponteiro de toque único. Se a jogabilidade depender de gestos multitoque complexos, como pinça para zoom ou rotação com dois dedos, configure vinculações de ação de entrada dedicadas para os controles do gamepad.

Para detalhes técnicos completos, propriedades e documentação de uso, consulte as referências de script oficiais UnityEngine.InputSystem.UI.VirtualMouseInput e UnityEngine.InputSystem.EnhancedTouch.TouchSimulation.