Exercício – Manipular objetos 3D usando o controle bounds

Concluído

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

  1. Além disso, você irá configurar o Rover Explorer para que seja possível posicionar as partes do rover no próprio Rover, montando assim o conjunto completo. No painel de Hierarquia, expanda o objeto RoverExplorer >RoverParts e selecione todos seus objetos filho de partes do rover e o objeto RoverAssembly. Em seguida, no painel de Inspetor, use o botão Adicionar Componente para adicionar os seguintes componentes a todos os objetos selecionados:

    • Componente Manipulador de Objetos (Script)
    • Componente do Controlador de Montagem de Parte (Script)

    Captura de tela do RoverAssembly com todos os objetos de parte 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 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 ouvinte do 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 Permitida, desmarque a lista de seleção Dimensionar para que somente Mover e Girar estejam habilitados:

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

  3. Selecione apenas o objeto RoverAssembly e remova o componente Interativo com Estado dele, caso exista. 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>MRTK Standard Assets>Audio>HoloLens2 para localizar os clipes de áudio:

    Captura de tela da janela Projeto do Unity com a pasta Áudio selecionada.

  5. No painel Hierarquia, reelege todos os objetos de 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 Reproduzir no Modo Ativo.
    • Altere o Blend Espacial para 1.

    Captura de tela do 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. 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 Local para Posicionar .

    Captura de tela do Unity com o componente Camera_Part PartAssemblyController configurado.

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

    • Para o Generator_Part, atribua o objeto Generator_PlacementHint ao campo Local para Posicionar .
    • Para o Lights_Part, atribua o objeto Lights_PlacementHint ao campo Local para Posicionar .
    • Para o UHFAntenna_Part, atribua o Objeto UHFAntenna_PlacementHint ao campo Local para Posicionar.
    • Para o Spectrometer_Part, atribua o objeto Spectrometer_PlacementHint ao campo Local para Posicionar.
    • Para o RoverAssembly, atribua o objeto em si, ou seja, o mesmo objeto RoverAssembly, ao campo Local para 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.

    Captura de tela do Unity com o evento OnClick do objeto de botão Redefinir configurado.

  9. Se você agora entrar no modo de jogo, poderá usar a interação de perto ou de longe para colocar as partes do veículo explorador no rover. Depois que a peça estiver próxima à 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 exibição dividida do modo de reprodução do Unity com o botão Redefinir sendo pressionado.

Adicionar controle de limites

  1. Na janela Hierarquia, selecione o objeto RoverExplorer e, 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:

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

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

    Captura de tela do Unity com o objeto RoverExplorer selecionado e o campo Pré-fabricado de Elementos Visuais de Limites configurado.

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

    • Selecione o objeto Frontplate > AnimatedContent > Icon > Label e altere o componente TextMeshPro para Habilitar. Verifique se o objeto Label está ativado na hierarquia.
    • Configure o evento PressableButton.OnClicked() atribuindo o objeto RoverExplorer ao campo Nenhum (Objeto) e selecionando o booliano de BoundsControl> como 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 None (Object ).
    • Na lista suspensa Sem Função, selecione o booliano de ObjectManipulator> como Habilitado para atualizar esse valor de propriedade quando o evento for disparado e 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 None (Object ).
    • Na lista suspensa No Function, selecione BoundsControl>bool HandlesActive para atualizar o valor dessa 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 Ícones de Fonte. Você pode encontrá-lo na lista de ícones ou definir o Nome do Ícone Atual como Ícone 40.

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

  4. Duplicar o botão BoundsControl_Enable e renomeá-lo para BoundsControl_Disable e, em seguida, no painel Inspetor, configure o componente Auxiliar de Configuração do Botão (Script) da seguinte maneira:

    • Selecione o objeto Frontplate > AnimatedContent > Icon > Label e altere o componente TextMeshPro para Desabilitar.
    • Configure o evento PressableButton.OnClicked() verificando se todas as caixas de seleção nos 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 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:

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