Exercício - Manipular objetos 3D usando o controle de limites
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.
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)
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:
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.
No painel Projeto, navegue até a pasta Pacotes>MRTK Standard Assets>Audio>HoloLens2 para localizar os clipes de áudio:
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.
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 .
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.
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.
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:
Adicionar controle de limites
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:
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.
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.
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.
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: