Terminologia do sistema de entrada — MRTK2

O sistema de entrada é um dos maiores sistemas de todos os recursos oferecidos pelo MRTK. Tantas coisas dentro do kit de ferramentas se baseiam nele (ponteiros, foco, pré-fabricados). O código dentro do sistema de entrada é o que permite interações naturais, como capturar e girar entre plataformas.

O sistema de entrada tem algumas de suas próprias terminologias que valem a pena definir:

  • Provedores de dados

    As configurações de entrada no perfil de entrada têm referências a entidades conhecidas como provedores de dados – outra palavra que descreve essas são gerenciadores de dispositivos. Esses são componentes cujo trabalho é estender o sistema de entrada mrtk ao fazer a interfacagem com um sistema subjacente específico. Um exemplo de provedor é o provedor Windows Mixed Reality, cujo trabalho é conversar com as APIs de Windows Mixed Reality subjacentes e, em seguida, traduzir os dados dessas APIs para conceitos de entrada específicos do MRTK abaixo. Outro exemplo seria o provedor OpenVR (cujo trabalho é falar com a versão abstrata do Unity das APIs do OpenVR e, em seguida, converter esses dados em conceitos de entrada do MRTK).

  • Controller

    Uma representação de um controlador físico (seja um controlador de 6 graus de liberdade, uma mão estilo HoloLens 1 com suporte a gestos, uma mão totalmente articulada, um controlador de movimento bissexto etc.). Os controladores são gerados por gerenciadores de dispositivos (ou seja, o gerenciador de dispositivos WMR gerará um controlador e gerenciará seu tempo de vida quando vir uma mão articulada chegando à existência).

  • Ponteiro

    Os controladores usam ponteiros para interagir com objetos de jogo. Por exemplo, o ponteiro de interação próxima é responsável por detectar quando a mão (que é um controlador) está próxima de objetos que se anunciam como suporte à "interação próxima". Outros exemplos para ponteiros são teletransporte ou ponteiros distantes (ou seja, o ponteiro de raio de mão do shell) que usam raycasts distantes para se envolver com conteúdo maior que o comprimento dos braços do usuário.

    Os ponteiros são criados pelo gerenciador de dispositivos e anexados a uma fonte de entrada. Para obter todos os ponteiros de um controlador, faça: controller.InputSource.Pointers

    Observe que um controlador pode ser associado a muitos ponteiros diferentes ao mesmo tempo. Para garantir que isso não se transforme em caos, há um mediador de ponteiro que controla quais ponteiros podem estar ativos (por exemplo, o mediador desabilitará ponteiros de interação distantes quando a interação próxima for detectada).

  • Foco

    Os eventos de ponteiro são enviados para objetos em foco. A seleção de foco varia de acordo com o tipo de ponteiro; um ponteiro de raio de mão usará raycasts, enquanto um ponteiro de cutucada usará spherecasts. Um objeto deve implementar IMixedRealityFocusHandler para receber o foco. É possível registrar globalmente um objeto para receber eventos de ponteiro não filtrados, mas essa abordagem não é recomendada.

    O componente que atualiza quais objetos estão em foco é o FocusProvider

  • Cursor

    Uma entidade associada a um ponteiro que fornece indicações visuais adicionais em torno da interação do ponteiro. Por exemplo, o FingerCursor renderizará um anel ao redor do dedo e poderá girar esse anel quando o dedo estiver perto de objetos "quase interativos". Um ponteiro pode ser associado a um único cursor no momento.

  • Interação e manipulação

    Os objetos podem ser marcados com um script de interação ou manipulação. Isso pode ser por meio de um Interactableou algo como/NearInteractionGrabbableManipulationHandler .

    Por exemplo, NearInteractionGrabbable e NearInteractionTouchable permitem que determinados ponteiros (especialmente ponteiros de interação próximos) saibam em quais objetos podem ser focados.

    Interactable e ManipulationHandler são exemplos de componentes que escutam eventos de ponteiro para modificar visuais da interface do usuário ou mover/dimensionar/girar objetos de jogo.

A imagem abaixo captura o build de alto nível (de baixo para cima) da pilha de entrada do MRTK:

Diagrama do Sistema de Entrada