Exercício – Manipular objetos 3D usando o controle de limites

Concluído

O script ObjectManipulator torna um objeto móvel, dimensionável e girável usando uma ou as duas mãos. Esse script dá suporte ao modelo de entrada de manipulação direta, pois permite que o usuário toque os hologramas diretamente com as mãos. Aqui, use ObjectManipulator para habilitar interações com as mãos para que você possa mover, dimensionar e girar o rover explorer.

  1. Além disso, você vai configurar o Rover Explorer para colocar as partes do rover no Rover para torná-lo um assembly completo do rover. No painel Hierarquia, expanda o objeto RoverExplorer >RoverParts e selecione todos os seus objetos de parte do rover filho e o objeto RoverAssembly, então, no painel Inspetor, use o botão Adicionar Componente para adicionar os seguintes componentes a todos os objetos selecionados:

    • Componente Object Manipulator (Script)
    • Componente Part Assembly Controller (Script)

    Screenshot of RoverAssembly with all rover part objects selected and components added.

  2. Com todos os objetos da parte de rover e o objeto RoverAssembly ainda selecionados, no painel Inspetor, configure o componente Manipulador de Objeto (Script) da seguinte maneira:

    • Em Configurações interativas básicas, localize o evento On Clicked (). Selecione o ícone + para adicionar um novo evento. Configure o evento da seguinte maneira:

      a. Atribua o objeto RoverAssembly como um ouvinte para o evento On Clicked (), arrastando-o de Hierarquia para o campo Nenhum (Objeto).

      b. Na lista suspensa Sem função, selecione TapToPlace>StartPlacement() para chamar esse método quando o evento for acionado.

    • Na lista suspensa Tipo de Manipulação Permitida, desmarque a caixa de seleção Escalar para que somente Mover e Girar estejam habilitados:

    Screenshot of Unity with Two Handed Manipulation Type configured.

  3. Selecione apenas o objeto RoverAssembly e remova o componente Interagível com o Estado nele, se houver um. Selecione os três pontos na extrema direita do componente e, em seguida, selecione Remover Componente.

  4. No painel Projeto, navegue até a pasta Pacotes>Ativos Standard do MRTJK>Áudio>HoloLens2 para localizar os clipes de áudio:

    Screenshot of Unity Project window with Audio folder selected.

  5. No painel Hierarquia, selecione novamente todos os objetos de parte do rover e, no painel Inspetor, selecione Adicionar Componente para adicionar o componente Fontes de Áudio e configure-o da seguinte maneira:

    • Atribua o clipe de áudio MRTK_Scale_Start ao campo AudioClip
    • Desmarque a caixa de seleção Reproduzir ao Ativar
    • Altere Mistura Espacial para 1

    Screenshot of Unity with all rover parts selected and Audio Source component added and configured.

  6. No painel Hierarquia, expanda o objeto RoverAssembly > RoverModel_PlacementHints_XRay >Parts_PlacementHints para revelar todos os objetos de dica de posicionamento, então selecione a primeira parte do rover, RoverParts >Camera_Part e configure o componente Controlador de Assembly de Parte (Script) da seguinte maneira:

    • Atribua o objeto Camera_PlacementHint ao campo Location To Place

    Screenshot of Unity with Camera_Part PartAssemblyController component configured.

  7. Repita a etapa 5 para cada um dos objetos de parte do rover restantes e o objeto RoverAssembly para configurar o componente Controlador de Montagem de Parte (Script) da seguinte maneira:

    • Para Generator_Part, atribua o objeto de Generator_PlacementHint ao campo Local a Posicionar
    • Para o Lights_Part, atribua o objeto Lights_PlacementHint ao campo Local para Posicionar
    • Para UHFAntenna_Part, atribua o objeto UHFAntenna_PlacementHint ao campo Local a Posicionar
    • Para o Spectrometer_Part, atribua o objeto Spectrometer_PlacementHint ao campo Location To Place
    • Para o RoverAssembly, atribua o próprio objeto, ou seja, o mesmo objeto RoverAssembly, para o campo Local a Posicionar
  8. No painel Hierarquia, selecione o objeto de botão RoverExplorer > Botões >Redefinir e, no painel Inspetor, configure o evento PressableButton OnClicked () da seguinte maneira:

    • Atribua o objeto RoverAssembly ao campo Nenhum (Objeto)
    • Na lista suspensa Sem Função, selecione PartAssemblyController>ResetPlacement () para definir essa função como a ação a ser executada quando o evento for disparado

    Screenshot of Unity with Reset button object OnClick event configured.

  9. Se agora você entrar no modo Jogo, poderá usar a interação próxima ou distante para posicionar as partes do rover no rover. Depois que a parte estiver próxima da dica de posicionamento correspondente, ela será encaixada no local e se tornará parte do Rover. Para redefinir os posicionamentos, pressione o botão Reset:

    Screenshot of Unity Play mode split view with Reset button being pressed.

Adicionar controle de limites

  1. Na janela Hierarquia, selecione o objeto RoverExplorer e, em seguida, na janela Inspetor, use o botão Adicionar Componente para adicionar o componente BoundsControl. Desmarque a caixa de seleção ao lado do componente para desabilitá-la por padrão:

    Screenshot of Unity with RoverExplorer object selected and components added and disabled.

  2. Na janela Projeto, navegue até a pasta Pacotes>Manipulação Espacial MRTK>BoundsControl>Prefabs, clique e arraste o prefab BoundingBoxWithHandles no campo Prefab de Visuais de Limites do componente Controle de Limites.

    Screenshot of Unity with RoverExplorer object selected and the Bounds Visuals Prefab field configured.

  3. No painel Hierarquia, expanda o objeto Menu >Buttons-GridLayout (Botões) para revelar os três botões, renomeie o terceiro botão como BoundsControl_Enable e, na janela Hierarquia, configure o objeto de jogo BoundsControl_Enable da seguinte maneira:

    • Selecione o objeto Frontplate >AnimatedContent > Ícone > Rótulo e altere o componente TextMeshPro para Habilitar. Verifique se o objeto Rótulo está ativado na hierarquia
    • Configure o evento PressableButton.OnClicked() atribuindo o objeto RoverExplorer ao campo None (Object) e selecionando BoundsControl>booliano Habilitado no menu suspenso Sem Função (verifique se a caixa de seleção do argumento está marcada)
    • Selecione o ícone + pequeno para adicionar outro evento
    • Atribua o objeto RoverExplorer ao campo Nenhum (Objeto)
    • Na lista suspensa Sem Função, selecione ObjectManipulator>booliano Habilitado para atualizar esse valor da propriedade quando o evento for disparado e verificar se a caixa de seleção está marcada
    • Selecione o ícone + pequeno para adicionar outro evento
    • Atribua o objeto RoverExplorer ao campo Nenhum (Objeto)
    • Na lista suspensa Sem Função, selecione BoundsControl>booliano HandlesActive para atualizar esse valor da propriedade quando o evento for disparado e verificar se a caixa de seleção está marcada
    • Selecione o objeto Frontplate > AnimatedContent > Icon > UIButtonFontIcon e altere o Ícone para o ícone de mão no componente Seletor de Ícones de Fontes. Você pode encontrá-lo na lista de ícones ou definir o ** Nome do Ícone Atual ** como "Ícone 40"

    Screenshot of Unity with BoundsControl_Enable button object selected and Button Config Helper component configured.

  4. Duplique o botão BoundsControl_Enable e renomeie-o para BoundsControl_Disable e, em seguida, no painel Inspetor, configure o componente Button Config Helper (Script) da seguinte forma:

    • Selecione o objeto Frontplate >AnimatedContent > Icon > Label e altere o componente TextMeshPro para Desabilitar
    • Configure o evento PressableButton.OnClicked() certificando-se de que todas as caixas de seleção sob os eventos estejam desmarcadas

    Screenshot of Unity with BoundsControl_Disable button object selected and Button Config Helper component configured.

  5. Se você agora entrar o modo Jogo e selecionar Habilitar para habilitar o Controle de Limites, poderá usar a interação próxima ou distante para mover, girar e dimensionar o controle de limites e selecionar Desabilitar para desabilitar o controle de limites novamente:

    Screenshot of Unity Play mode split view with Bounds Control being manipulated.