Sistema principal — MRTK2

No centro do sistema de entrada está o InputSystem, que é um serviço responsável por inicializar e operar toda a funcionalidade relacionada à entrada associada ao MRTK.

Observação

Supõe-se que os leitores já tenham lido e tenham uma compreensão básica da seção de terminologia .

Esse serviço é responsável por:

  • Lendo o perfil do sistema de entrada
  • Iniciando os provedores de dados configurados (por exemplo, Windows Mixed Reality Device Manager e OpenVR Device Manager).
  • Instanciação do GazeProvider, que é um componente responsável por fornecer informações de foco de cabeçalho no estilo holoLens (1ª geração), além de HoloLens 2 informações de foco ocular de estilo.
  • Instanciação do FocusProvider, que é um componente responsável por determinar objetos que têm foco. Isso é descrito com mais profundidade na seção de ponteiros e foco da documentação.
  • Fornecendo pontos de registro para todos os eventos de entrada (como ouvintes globais).
  • Fornecendo recursos de expedição de eventos para esses eventos de entrada.

Eventos de entrada

Os eventos de entrada geralmente são acionados em dois canais diferentes:

Objetos em foco

Os eventos podem ser enviados diretamente para um GameObject que tem foco. Por exemplo, um objeto pode ter um script que implementa IMixedRealityTouchHandler. Esse objeto obteria eventos de toque quando focado por uma mão próxima a ele. Esses tipos de eventos vão "para cima" na hierarquia GameObject até encontrar um GameObject capaz de lidar com o evento.

Isso é feito usando ExecuteHierarchy de dentro da implementação padrão do sistema de entrada.

Ouvintes globais

Os eventos podem ser enviados para ouvintes globais. É possível registrar-se para todos os eventos de entrada usando a interface do sistema de IMixedRealityEventSystem entrada. É recomendável usar o método RegisterHandler para se registrar em eventos globais – a função preterida Register fará com que os ouvintes sejam notificados sobre TODOS os eventos de entrada, em vez de apenas eventos de entrada de um tipo específico (em que o tipo é definido pela interface do evento).

Observe que os ouvintes de fallback são outro tipo de ouvinte global que também são desencorajados porque receberão todos os eventos de entrada que não foram tratados em outros lugares da cena.

Ordem de expedição de eventos

Geralmente, os eventos são enviados aos ouvintes da maneira a seguir. Observe que, se qualquer uma das etapas abaixo marcar o evento como manipulado, o processo de expedição de eventos será interrompido.

  1. O evento é enviado aos ouvintes globais.
  2. O evento é enviado para caixas de diálogo modais do objeto focado.
  3. O evento é enviado para o objeto focado.
  4. O evento é enviado para ouvintes de fallback.

Gerenciadores de dispositivos e provedores de dados

Essas entidades são responsáveis pela interfiguração com APIs de nível inferior (como APIs de Windows Mixed Reality ou APIs OpenVR) e pela tradução de dados desses sistemas em aquelas que se ajustam às abstrações de entrada de nível mais alto do MRTK. Eles são responsáveis por detectar, criar e gerenciar o tempo de vida dos controladores.

O fluxo básico de um gerenciador de dispositivos envolve:

  1. O gerenciador de dispositivos é instanciado pelo serviço do sistema de entrada.
  2. O gerenciador de dispositivos se registra com seu sistema subjacente (por exemplo, o gerenciador de dispositivos Windows Mixed Reality se registrará para eventos de entrada e gesto.
  3. Ele cria controladores que descobre do sistema subjacente (por exemplo, o provedor pode detectar a presença de mãos articuladas)
  4. Em seu loop Update(), chame UpdateController() para sondar o novo estado do sistema subjacente e atualizar sua representação de controlador.