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

Concluído

O ObjectManipulator script torna um objeto móvel, escalável e rotativo usando 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 você 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 componentes filhos de rover e o objeto RoverAssembly, e depois, 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)

    Captura de ecrã do RoverAssembly com todos os objetos de peças do rover selecionados e componentes adicionados.

  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 de Hierarchy para o campo None (Object).

      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:

    Captura de tela de Unity com o tipo de manipulação de duas mãos configurado.

  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:

    Captura de tela da janela Unity Project com a pasta Audio selecionada.

  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:

    • Atribua 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.

    Captura de tela de Unity com todas as partes do rover selecionadas e o componente Fonte de áudio adicionado e configurado.

  6. No painel Hierarquia, expanda o objeto RoverAssembly>RoverModel_PlacementHints_XRray>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 Colocar .

    Captura de ecrã do Unity com o componente Camera_Part PartAssemblyController configurado.

  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 para colocar .
    • 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 Localização para Colocação.
    • Para o RoverAssembly, atribua o próprio objeto, ou seja, o mesmo objeto RoverAssembly, ao campo Localização Para Colocar.
  8. No painel Hierarquia, selecione o objeto do botão > botões do RoverExplorer >Redefinir e, em seguida, no painel Inspetor, configure o evento PressableButton.OnClicked () da seguinte forma:

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

    Captura de tela do Unity com o evento OnClick do objeto Reset button configurado.

  9. Se agora entrares no modo de Jogo, podes usar a interação de perto ou de longe 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:

    Captura de tela da visualização dividida do modo Unity Play com o botão Reset sendo pressionado.

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 desativá-lo por padrão:

    Captura de tela do Unity com o objeto RoverExplorer selecionado e os componentes adicionados e desativados.

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

    Captura de ecrã do Unity com o objeto RoverExplorer selecionado e o campo de Prefab de Visualização de Limites configurado.

  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, em seguida, 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 de + para adicionar outro evento.
    • Atribua o objeto RoverExplorer ao campo Nenhum (Objeto ).
    • Na lista suspensa No Function, selecione ObjectManipulator>bool Enabled para atualizar este valor da propriedade quando o evento for acionado e verifique se a caixa de seleção do argumento está marcada.
    • Selecione o pequeno ícone de + para adicionar outro evento.
    • Atribua 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 encontrá-lo na lista de ícones ou definir Nome do ícone atual como ícone 40.

    Screenshot do Unity com o objeto 'BoundsControl_Enable button' selecionado e o componente Button Config Helper configurado.

  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 estão desmarcadas.

    Captura de tela do Unity com o objeto de botão BoundsControl_Disable selecionado e o componente Auxiliar de Configuração de Botão configurado.

  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:

    Captura de tela da visualização dividida do modo Unity Play com o Controle de Limites sendo manipulado.