5. Criar conteúdo dinâmico usando Solucionadores5. Creating dynamic content using Solvers

Neste tutorial, você vai explorar maneiras de posicionar hologramas dinamicamente usando as ferramentas de posicionamento disponíveis do MRTK, conhecidas como Solucionadores, para resolver cenários de posicionamento espacial complexos.In this tutorial, you will explore ways to dynamically place holograms using the MRTK's available placement tools, known as Solvers, to solve complex spatial placement scenarios. No MRTK, os Solucionadores são um sistema de scripts e comportamentos usados para permitir que os objetos sigam você, o usuário ou outros objetos do jogo na cena.In the MRTK, Solvers are a system of scripts and behaviors used to allow objects to follow you, the user, or other game objects in the scene. Eles também podem ser usados para se ajustar a determinadas posições, tornando seu aplicativo mais intuitivo.They can also be used to snap to certain positions, making your app more intuitive.

ObjetivosObjectives

  • Apresentar os Solucionadores do MRTKIntroduce the MRTK's Solvers
  • Saiba como usar os solucionadores para direcionar o usuário para objetosLearn how to use Solvers to direct the user to objects
  • Saiba como usar os solucionadores para reposicionar objetosLearn how to use Solvers to reposition objects

Localização dos Solucionadores no MRTKLocation of Solvers in the MRTK

Os Solucionadores do MRTK estão localizados na pasta MRTK SDK.The MRTK's Solvers are located in the MRTK SDK folder. Para ver os Solucionadores disponíveis em seu projeto, na janela Projeto, navegue até Ativos > MRTK > SDK > Recursos > Utilitários > Solucionadores:To see the available Solvers in your project, in the Project window, navigate to Assets > MRTK > SDK > Features > Utilities > Solvers:

Janela Projeto do Unity com a pasta Solucionadores selecionada

Neste tutorial, examinaremos a implementação do Solucionador de Indicador Direcional e o Solucionador Toque para Posicionar.In this tutorial, we will review the implementation of the Directional Indicator Solver and the Tap To Place Solver. Para saber mais sobre a gama completa de Solucionadores disponíveis no MRTK, você pode consultar o guia Solucionadores no Portal de Documentação do MRTK.To learn more about the full range of Solvers available in the MRTK, you can refer to the Solvers guide in the MRTK Documentation Portal.

Observação

O Solucionador de Indicador Direcional não está localizado nas pastas de Solucionadores supramencionadas, mas nas pastas Ativos > MRTK > SDK > Experimental > Recursos > Utilitários, pois é um recurso experimental.The Directional Indicator Solver is not located in the Solvers folders referenced above, but in the Assets > MRTK > SDK > Experimental > Features > Utilities folders, because it is an experimental feature.

Como usar o Solucionador de Indicador Direcional para direcionar o usuário a objetosUsing the Directional Indicator Solver to direct the user to objects

Na janela Projeto, navegue até a pasta Ativos > MRTK.Tutorials.GettingStarted > Pré-Fabricados, clique e arraste o pré-fabricado Divisa para a janela Hierarquia e defina sua Posição de Transformação como X = 0, Y = 0, Z = 2 para posicioná-lo perto do objeto RoverExplorer:In the Project window, navigate to the Assets > MRTK.Tutorials.GettingStarted > Prefabs folder, click-and-drag the Chevron prefab into the Hierarchy window, and set it's Transform Position to X = 0, Y = 0, Z = 2 to position it near the RoverExplorer object:

Unity com o pré-fabricado Divisa recém-adicionado selecionado

Dica

Se você descobrir que a câmera ou quaisquer outros ícones em sua cena estão ocultando os objetos ou causando distração, poderá ocultá-los alternando o Gizmos para a posição Desligado, conforme mostra a imagem acima.If you find that the camera or any other icons in your scene are hiding the objects or are distracting, you can hide these by toggling the Gizmos to the off position, as shown in the image above. Para saber mais sobre o menu Gizmos e como você pode usá-lo para otimizar a exibição de cena, consulte a documentação do menu Gizmos do Unity.To learn more about the Gizmos menu and how you can use it to optimize your scene view, you can refer to Unity's Gizmos menu documentation.

Renomeie o Indicador do objeto de Divisa recém-adicionado e, em seguida, na janela do Inspetor, use o botão Adicionar Componente para adicionar o componente DirectionalIndicator:Rename the newly added Chevron object Indicator, then in the Inspector window, use the Add Component button to add the DirectionalIndicator:

Unity com o componente do solucionador DirectionalIndicator adicionado

Observação

Quando você adiciona um solucionador, nesse caso, o componente DirectionalIndicator, o componente SolverHandler é adicionado automaticamente porque os solucionadores exigem isso.When you add a Solver, in this case, the DirectionalIndicator component, the SolverHandler component is automatically added because Solvers require it.

Observação

O Controlador de Indicador Direcional (Script) não faz parte do MRTK, mas foi incluído nos ativos do tutorial.The Directional Indicator Controller (Script) is not part of the MRTK but was included with the tutorial assets.

Configure os componentes DirectionalIndicator e SolverHandler da seguinte maneira:Configure the DirectionalIndicator and SolverHandler components as follows:

  • Verifique se o Tipo de Destino Rastreado do componente SolverHandler está definido como CabeçaVerify that the SolverHandler component's Tracked Target Type is set to Head
  • Atribua o RoverExplorer ao Destino Direcional do componente DirectionalIndicator arrastando-o da janela hierarquia para o campo Nenhum (Transformação)Assign the RoverExplorer to the DirectionalIndicator component's Directional Target by dragging it from the Hierarchy window into the None (Transform) field
  • Altere o Deslocamento de Exibição para 0,2Change the View Offset to 0.2

Unity com o componente do solucionador DirectionalIndicator configurado

Pressione o botão Reproduzir para entrar no modo Jogo, pressione e mantenha o botão direito do mouse pressionado enquanto move o mouse para a esquerda ou para a direita para girar a direção do foco e observe o seguinte:Press the Play button to enter Game mode, press-and-hold the right mouse button while moving your mouse to the left or right to rotate your gaze direction, and notice the following:

  • Quando você olhar para longe do objeto RoverExplorer, o objeto de Indicador será exibido e apontará para o objeto RoverExplorerWhen you look away from the RoverExplorer object, the Indicator object will appear and point towards the RoverExplorer object

Modo de exibição dividida do Modo de reprodução do Unity com o solucionador DirectionalIndicator em uso

Observação

Se você não vir o raio da câmera na janela Cena, verifique se o menu Gizmos está habilitado, como mostra a imagem acima.If you don't see the camera ray in your Scene window, make sure your Gizmos menu is enabled, as shown in the image above.

Dica

Para saber como usar a simulação de entrada no editor, você pode consultar o guia Como usar a simulação de entrada de mão no editor para testar uma cena no Portal de documentação do MRTK.To learn how to use the in-editor input simulation, you can refer to the Using the In-Editor Hand Input Simulation to test a scene guide in the MRTK Documentation Portal.

Dica

Se o computador tiver um microfone, você poderá alternar facilmente o estado ativo do painel Diagnóstico que aparece na janela Jogo usando o comando de fala "alternar diagnóstico".If your computer has a microphone, you can easily toggle the active state of the Diagnostics panel that appears in the Game window by using the speech command "toggle diagnostics." Como alternativa, você pode desabilitá-lo no Perfil de Configuração do MRTK > Diagnóstico > Habilitar o Sistema de Diagnóstico.Alternatively, you can disable it in the MRTK Configuration Profile > Diagnostics > Enable Diagnostics System. No entanto, geralmente é recomendável manter o Sistema de Diagnóstico ativo durante o desenvolvimento.However, it is generally recommended to keep the Diagnostics System active during development.

Usando o Solucionador Tocar para Posicionar para reposicionar objetosUsing the Tap to Place Solver to reposition objects

Na janela hierarquia, selecione o objeto RoverExplorer > RoverAssembly e, na janela Inspetor, use o botão Adicionar Componente para adicionar o componente Tocar para Posicionar (Script) e configure-o da seguinte maneira:In the Hierarchy window, select the RoverExplorer > RoverAssembly object, then in the Inspector window, use the Add Component button to add the Tap To Place (Script) component, and configure it as follows:

  • Verifique se o Tipo de Destino Rastreado do componente SolverHandler está definido como CabeçaVerify that the SolverHandler component's Tracked Target Type is set to Head
  • Marque a caixa de seleção Manter Orientação VerticalCheck the Keep Orientation Vertical checkbox
  • No menu suspenso Superfícies Magnéticas > Elemento 0, desmarque todas as opções que esperam Reconhecimento EspacialFrom the Magnetic Surfaces > Element 0 dropdown, uncheck all options expect Spatial Awareness

Unity com o componente do solucionador TapToPlace adicionado e configurado

Observação

A configuração de Superfícies Magnéticas determina quais objetos o componente Tocar para Posicionar (Script) pode detectar ao posicionar um objeto.The Magnetic Surfaces setting determines which objects the Tap To Place (Script) component can detect when placing an object. Ao alterar a configuração para Somente Reconhecimento Espacial, o componente Tocar para Posicionar (Script) só poderá posicionar o Rover em objetos na camada do Unity denominada Reconhecimento Espacial, que, por padrão, é a Malha de Conscientização Espacial gerada pelo HoloLens.By changing the setting to only Spatial Awareness, the Tap To Place (Script) component will only be able to place the Rover on objects on the Unity Layer named Spatial Awareness, which by default is the Spatial Awareness Mesh generated by the HoloLens.

Para saber mais sobre Camadas, você pode consultar a documentação Camadas do Unity.To learn more about Layers, you can refer to Unity's Layers documentation.

Dica

Se você quiser ver a malha de conscientização espacial ao testar a funcionalidade Tocar para Posicionar em seu HoloLens, poderá definir temporariamente a Opção de Exibição do Observador de Malha Espacial como Visível.If you want to see the Spatial Awareness Mesh when testing the Tap To Place functionality on your HoloLens, you can temporarily set the Spatial Mesh Observer's Display Option to Visible. Para obter um lembrete sobre como alterar a Opção de Exibição, você pode consultar as instruções de Como alterar a opção de exibição de conscientização espacial.For a reminder on how to change the Display Option, you can refer to the Changing the Spatial Awareness Display Option instructions.

Com o objeto RoverAssembly ainda selecionado na janela Hierarquia, na janela Inspetor, localize o evento On Placing Started () e clique no ícone + para adicionar um evento:With the RoverAssembly object still selected in the Hierarchy window, in the Inspector window, locate the On Placing Started () event and click the + icon to add a new event:

Unity com o evento TapToPlace OnPlacingStarted adicionado

Configure o evento da seguinte maneira:Configure the event as follows:

  • Atribua o objeto RoverAssembly como um ouvinte para o evento On Placing Started () arrastando-o da janela Hierarquia para o campo Nenhum (Objeto)Assign the RoverAssembly object as a listener for the On Placing Started () event by dragging it from the Hierarchy window into the None (Object) field
  • Na lista suspensa Sem Função, selecione TapToPlace > float SurfaceNormalOffset para atualizar o valor da propriedade SurfaceNormalOffset quando o evento é disparadoFrom the No Function dropdown, select TapToPlace > float SurfaceNormalOffset to update the SurfaceNormalOffset property value when the event is triggered
  • Verifique se o argumento está definido como 0Verify that the argument is set to 0

Unity com o evento TapToPlace OnPlacingStarted configurado

Na janela Hierarquia, clique com o botão direito do mouse em um ponto vazio e selecione Objeto 3D > Cubo, para criar um objeto temporário que representa o aterramento e configure o componente Transformação da seguinte maneira:In the Hierarchy window, right-click on an empty spot and select 3D Object > Cube, to create a temporary object representing the ground, and configure the Transform component as follows:

  • Posição: X = 0, Y = -1,65, Z = 6Position: X = 0, Y = -1.65, Z = 6
  • Rotação: X = 0, Y = 0, Z = 0Rotation: X = 0, Y = 0, Z = 0
  • Escala: X = 10, Y = 0,2, Z = 10Scale: X = 10, Y = 0.2, Z = 10

Unity com o objeto de cubo de chão temporário adicionado e posicionado

Com o Cubo temporário ainda selecionado na janela Hierarquia, na janela Inspetor, use a lista suspensa Camadas para alterar a configuração de camada do cubo apenas para incluir a camada Conscientização Espacial:With the temporary Cube still selected in the Hierarchy window, in the Inspector window, use the Layers dropdown to change the Cube's Layer setting only to include the Spatial Awareness layer:

Unity com a Camada de objeto de cubo de chão temporário definida como Reconhecimento Espacial

Pressione o botão Reproduzir para entrar no modo Jogo e pressione e segure o botão direito do mouse enquanto move o mouse para baixo até o foco atingir o objeto RoverAssembly:Press the Play button to enter Game mode, then press-and-hold the right mouse button while moving your mouse down until the gaze hit's the RoverAssembly object:

Modo de exibição dividida do Modo de reprodução do Unity com o foco sobre o objeto RoverAssembly

Clique no botão esquerdo do mouse para iniciar o processo de tocar para posicionar:Click the left mouse button to start the tap-to-place process:

Modo de exibição dividida do Modo de reprodução do Unity com o posicionamento de TapToPlace iniciado

Pressione e mantenha o botão direito do mouse pressionado enquanto move o mouse para a esquerda ou para a direita para girar sua direção de foco. Quando estiver satisfeito com o posicionamento, clique no botão esquerdo do mouse:Press-and-hold the right mouse button while moving your mouse to the left or right to rotate your gaze direction, when you are happy with the placement, click the left mouse button:

Modo de exibição dividida do Modo de reprodução do Unity com o posicionamento de TapToPlace encerrado

Quando terminar de testar o recurso no modo de jogo, clique com o botão direito do mouse no objeto Cubo e selecione Excluir para removê-lo da cena:Once you are done testing the feature in the Game mode, right-click on the Cube object and select Delete to remove it from the scene:

Unity com o cubo de chão temporário selecionado e o menu pop-up contextual Excluir

ParabénsCongratulations

Neste tutorial, você aprendeu a usar o Solucionador Direcional do MRTK para ter um elemento de interface do usuário instruindo intuitivamente os usuários a objetos.In this tutorial, you learned how to use the MRTK's Directional Indicator Solver to have a UI element intuitively direct the user to objects. Você também aprendeu a usar o Solucionador Toque para Posicionar para reposicionar os objetos facilmente.You also learned how to use the Tap To Place Solver to reposition objects easily.

Para saber mais sobre esses e outros solucionadores incluídos no MRTK, consulte o guia Solucionadores no Portal de Documentação do MRTK.To learn more about these and other solvers included with the MRTK, you can refer to the Solvers guide in the MRTK Documentation Portal.

Próximo tutorial: 6. Como criar interfaces do usuárioNext Tutorial: 6. Creating user interfaces