Sistema de entrada

O sistema de entrada é um dos maiores sistemas de todas as funcionalidades oferecidas pelo MRTK. Tantas coisas dentro do conjunto de ferramentas constroem-se em cima dele (ponteiros, foco, pré-fabricados). O código dentro do sistema de entrada é o que permite interações naturais como agarrar e rodar através de plataformas.

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

  • Fornecedores de dados

    As definições de entrada no perfil de entrada têm referências a entidades conhecidas como fornecedores de dados - outra palavra que descreve estas são gestoras de dispositivos. Trata-se de componentes cujo trabalho consiste em alargar o sistema de entrada MRTK através da interação com um sistema específico subjacente. Um exemplo de um fornecedor é o prestador Windows Mixed Reality, cujo trabalho é falar com as APIs subjacentes Windows Mixed Reality e, em seguida, traduzir os dados dessas APIs em conceitos de entrada específicos do MRTK abaixo. Outro exemplo seria o fornecedor OpenVR (cujo trabalho é falar com a versão abstrata da Unidade de APIs OpenVR e, em seguida, traduzir esses dados em conceitos de entrada MRTK).

  • Controlador

    Uma representação de um controlador físico (seja um controlador de 6 graus de liberdade, uma mão de HoloLens estilo 1 com suporte de gesto, uma mão totalmente articulada, um controlador de movimento saltitado, etc.). Os controladores são gerados por gestores de dispositivos (isto é, o gestor de dispositivos WMR gerará um controlador e gere a sua vida útil quando vê uma mão articulada a surgir).

  • Ponteiro

    Os controladores usam ponteiros para interagir com objetos de jogo. Por exemplo, o ponteiro de interação próxima é responsável por detetar quando a mão (que é um controlador) está perto de objetos que se anunciam como suporte de "quase interação". Outros exemplos para ponteiros são teletransporte ou ponteiros distantes (isto é, o ponteiro do raio da mão da concha) que usam raycasts distantes para se envolver com conteúdo que é mais longo do que o comprimento de braço do utilizador.

    Os ponteiros são criados pelo gestor do dispositivo e, em seguida, ligados a uma fonte de entrada. Para obter todos os ponteiros para um controlador, faça: controller.InputSource.Pointers

    Note que um controlador pode ser associado a muitos ponteiros diferentes ao mesmo tempo. Para garantir que isto não se transforme no caos, existe um mediador de ponteiro que controla quais os ponteiros que podem estar ativos (por exemplo, o mediador irá desativar os ponteiros de interação distante quando for detetada a interação próxima).

  • Foco

    Os eventos de ponteiro são enviados para objetos em foco. A seleção de foco variará consoante o tipo de ponteiro; um ponteiro de raios de mão usará raycasts, enquanto um ponteiros usará esferas. Um objeto deve implementar o IMixedRealityFocusHandler para receber o foco. É possível registar globalmente um objeto para receber eventos de ponteiro não filtrados, mas esta abordagem não é recomendada.

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

  • Cursor

    Uma entidade associada a um ponteiro que dá pistas visuais adicionais em torno da interação do ponteiro. Por exemplo, o FingerCursor renderá um anel à volta do dedo e poderá rodar esse anel quando o dedo estiver perto de objetos "quase interagidos". 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. Isto pode ser através de um Interactable , ou algo como NearInteractionGrabbable/ManipulationHandler .

    Por exemplo, NearInteractionGrabbable e NearInteractionTouchable permitem que certos ponteiros (especialmente perto de ponteiros de interação) saibam em que objetos podem ser focados.

    Interactível e ManipulaçãoHandler são exemplos de componentes que ouvem eventos de pointer para modificar visuais de UI ou mover/escalar/rodar objetos de jogo.

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

Diagrama do sistema de entrada