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

Concluído

O script ObjectManipulator torna um objeto móvel, dimensionável e rotativo com uma ou duas mãos. Este script suporta o modelo de entrada de manipulação direta porque permite que o usuário toque hologramas diretamente com as mãos. Aqui, use ObjectManipulator para habilitar interações manuais para que você possa mover, dimensionar e girar o explorador de rover.

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

    • Componente Manipulador de objetos (script)
    • Componente Controlador de montagem de peças (script)

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

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

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

      a. Atribua o objeto RoverAssembly como ouvinte para o evento On Clicked (), arrastando-o da 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 permitido, desmarque a caixa de seleção Escala, para que apenas Mover e Girar estejam habilitados:

    Screenshot of Unity with Two Handed Manipulation Type configured.

  3. Selecione apenas o objeto RoverAssembly e remova o componente Stateful Interactable nele, se houver um. Selecione os três pontos na extremidade direita do componente e, em seguida, selecione Remover componente.

  4. No painel Projeto, navegue até a pasta Pacotes>MRTK Standard Assets>Audio>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 da parte do rover e, em seguida, no painel Inspetor, selecione Adicionar componente para adicionar o componente Fontes de áudio e configurá-lo da seguinte maneira:

    • Atribuir o clipe de áudio MRTK_Scale_Start ao campo AudioClip
    • Desmarque a caixa de seleção Tocar ao acordar
    • Altere a 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, selecione a primeira parte do rover, RoverParts> Camera_Part, e configure o componente Part Assembly Controller (Script) da seguinte maneira:

    • Atribua o objeto Camera_PlacementHint ao campo Local a Local

    Screenshot of Unity with Camera_Part PartAssemblyController component configured.

  7. Repita a etapa 5 para cada um dos objetos de peça de rover restantes e o objeto RoverAssembly para configurar o componente Part Assembly Controller (Script) da seguinte maneira:

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

    • Atribuir 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 acionado

    Screenshot of Unity with Reset button object OnClick event configured.

  9. Se você entrar no modo Jogo, poderá usar a interação próxima ou distante para colocar as peças do rover no Rover. Uma vez que a peça esteja perto da dica de posicionamento correspondente, ela se encaixará no lugar e se tornará parte do Rover. Para redefinir os posicionamentos, você pode pressionar o botão Redefinir:

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

Adicionar controle de limites

  1. Na janela Hierarchy, selecione o objeto RoverExplorer e, em seguida, na janela Inspetor, use o botão Add Component para adicionar o componente BoundsControl. Desmarque a caixa de seleção ao lado do componente para desativá-lo por padrão:

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

  2. Na janela Projeto, navegue até a pasta Packages>MRTK Spatial Manipulation>BoundsControl>Prefabs, clique e arraste o campo pré-fabricado BoundingBoxWithHandles do componente Bounds Visuals Prefab do componente Bounds Control.

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

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

    • Selecione o objeto Frontplate AnimatedContent Icon Label e altere o componente TextMeshPro para Enable.>>> Verifique se o objeto Label está ativado na hierarquia
    • Configure o evento PressableButton.OnClicked() atribuindo o objeto RoverExplorer ao campo Nenhum (Objeto) e selecionando BoundsControl>bool Enabled na lista suspensa Sem função (verifique se a caixa de seleção do argumento está marcada)
    • Selecione o pequeno + ícone para adicionar outro evento
    • Atribuir o objeto RoverExplorer ao campo Nenhum (Objeto)
    • Na lista suspensa Sem Função, selecione ObjectManipulator>bool Enabled para atualizar esse valor de propriedade quando o evento for acionado e verifique se a caixa de seleção do argumento está marcada
    • Selecione o pequeno + ícone para adicionar outro evento
    • Atribuir o objeto RoverExplorer ao campo Nenhum (Objeto)
    • Na lista suspensa Sem Função, selecione BoundsControl>bool HandlesActive para atualizar esse valor de propriedade quando o evento for acionado e verifique se a caixa de seleção do argumento está marcada
    • Selecione o objeto Frontplate AnimatedContent > Icon UIButtonFontIcon> e altere o ícone para o ícone de quatro setas no componente Seletor de ícone de fonte.> Você pode encontrar isso na lista de ícones, ou definir ** 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 Auxiliar de Configuração de Botão (Script) da seguinte maneira:

    • Selecione o objeto Frontplate AnimatedContent > Icon > Label e altere o componente TextMeshPro para Disable >
    • 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ê entrar no modo de jogo e selecionar Ativar 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 Desativar para desabilitar o controle de limites novamente:

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