Exercício - Manipular objetos 3D usando o controle de limites
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.
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)
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:
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:
- 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
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
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
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
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:
Adicionar controle de limites
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:
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.
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'
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
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: