Exercício – Manipular objetos 3D usando o controle de limites
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.
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)
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:
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.
No painel Projeto, navegue até a pasta Pacotes>Ativos Standard do MRTJK>Áudio>HoloLens2 para localizar os clipes de áudio:
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
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
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
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
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:
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 desabilitá-la por padrão:
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.
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"
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
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: