Terminologia do sistema de entrada – MRTK2

O sistema de entrada é um dos maiores sistemas de todas as funcionalidades oferecidas pelo MRTK. Muitas coisas no toolkit baseiam-se na mesma (ponteiros, foco, prefabs). O código no sistema de entrada é o que permite interações naturais como agarrar e rodar entre plataformas.

O sistema de entrada tem alguma da sua própria terminologia que vale 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 gestores de dispositivos. Estes são componentes cuja tarefa consiste em expandir o sistema de entrada MRTK ao interagir com um sistema subjacente específico. Um exemplo de um fornecedor é o fornecedor de Windows Mixed Reality, cujo trabalho é falar com as APIs de Windows Mixed Reality subjacentes e, em seguida, traduzir os dados dessas APIs para conceitos de entrada específicos de MRTK abaixo. Outro exemplo seria o fornecedor OpenVR (cujo trabalho é falar com a versão abstraída do Unity das APIs OpenVR e, em seguida, traduzir esses dados em conceitos de entrada de MRTK).

  • Controlador

    Uma representação de um controlador físico (seja um controlador de 6 graus de liberdade, uma mão de estilo HoloLens 1 com suporte de gestos, uma mão totalmente articulada, um controlador de movimento bissexto, etc.). Os controladores são gerados por gestores de dispositivos (ou seja, o gestor de dispositivos WMR gerará um controlador e gerirá a sua duração quando vir uma mão articulada a surgir).

  • Ponteiro

    Os controladores utilizam ponteiros para interagir com objetos de jogo. Por exemplo, o ponteiro de interação próximo é responsável por detetar quando a mão (que é um controlador) está próxima de objetos que se anunciam como suportando "interação próxima". Outros exemplos para ponteiros são teletransporte ou ponteiros distantes (ou seja, o ponteiro de raios da mão da shell) que utilizam raycasts distantes para interagir com conteúdos que são mais longos do que o comprimento dos braços do utilizador.

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

    Tenha em atenção que um controlador pode ser associado a muitos ponteiros diferentes ao mesmo tempo. Para garantir que isto não se transforma num caos, existe um mediador de ponteiro que controla os ponteiros que podem estar ativos (por exemplo, o mediador irá desativar ponteiros de interação distantes quando for detetada uma interação próxima).

  • Foco

    Os eventos de ponteiro são enviados para objetos em foco. A seleção de foco irá variar consoante o tipo de ponteiro; um ponteiro de raios de mão utilizará raycasts, enquanto um ponteiro de punção utilizará spherecasts. Um objeto tem de implementar 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 os objetos em foco é o FocusProvider

  • Cursor

    Uma entidade associada a um ponteiro que fornece pistas visuais adicionais em torno da interação do ponteiro. Por exemplo, o FingerCursor irá compor um anel à volta do dedo e pode rodar esse anel quando o dedo estiver perto de objetos "quase interacionáveis". Um ponteiro pode ser associado a um único cursor no momento.

  • Interação e Manipulação

    Os objetos podem ser etiquetados com um script de interação ou manipulação. Isto pode ser através de um Interactable, ou algo como/NearInteractionGrabbableManipulationHandler .

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

    Interactable e ManipulationHandler são exemplos de componentes que ouvem eventos de ponteiro para modificar elementos visuais da IU ou mover/dimensionar/rodar objetos de jogo.

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

Diagrama do Sistema de Entrada