Esercizio - Manipolare oggetti 3D usando il controllo dei limiti
Lo script ObjectManipulator consente di spostare, ridimensionare e ruotare un oggetto usando una o due mani. Questo script supporta il modello di input di manipolazione diretta in quanto consente all'utente di toccare gli ologrammi direttamente con le proprie mani. In questa unità si userà ObjectManipulator per abilitare le interazioni manuali in modo da poter spostare, ridimensionare e ruotare il Rover Explorer (Esplora rover).
Configurerai inoltre Rover Explorer (Esplora rover) in modo che sia possibile posizionare le parti rover sul rover per renderlo un assembly di rover completo. Nel riquadro Hierarchy (Gerarchia) espandi l'oggetto RoverExplorer >RoverParts e seleziona tutti i relativi oggetti parte rover figlio e l'oggetto RoverAssembly, quindi nel riquadro Inspector (Controllo) usa il pulsante Add component (Aggiungi componente) per aggiungere i componenti seguenti a tutti gli oggetti selezionati:
- Componente Object Manipulator (Script) (Manipolatore oggetti - script)
- Componente Part Assembly Controller (Script) (Controllo assembly parti - script)
Con tutti gli oggetti parte rover e l'oggetto RoverAssembly ancora selezionati, nel riquadro Inspector (Controllo) configura il componente Object Manipulator (Script) (Manipolatore oggetti - script) come indicato di seguito:
In Impostazioni interattive di base individuare l'evento On Clicked (). Selezionare l'icona + per aggiungere un nuovo evento. Configura l'evento come indicato di seguito:
a. Assegnare l'oggetto RoverAssembly come listener per l'evento Al clic () trascinandolo da Gerarchia sul campo Nessuno (Oggetto).
b. Dall'elenco a discesa Nessuna funzione, selezionare TapToPlace>StartPlacement() per chiamare questo metodo quando viene attivato l'evento.
Dall'elenco a discesa Tipo di manipolazione consentita deselezionare la casella Scala in modo che siano abilitate solo le opzioni Sposta e Ruota:
Selezionare solo l'oggetto RoverAssembly e rimuovere il componente interattivo con stato su di esso, se presente. Selezionare i tre punti a destra del componente, quindi selezionare Rimuovi componente.
Nel riquadro Project (Progetto), passare alla cartella Pacchetti>Asset MRTK Standard>Audio>HoloLens2 per individuare le clip audio:
Nel riquadro Hierarchy (Gerarchia) selezionare di nuovo gli oggetti parte rover e quindi nel riquadro Inspector (Controllo) selezionare Add Component (Aggiungi componente) per aggiungere il componente Audio Sources (Origini audio) e configurarlo come indicato di seguito:
- Assegna il clip audio MRTK_Scale_Start al campo AudioClip
- Deseleziona la casella di controllo Play On Awake (Riproduci quando operativo)
- Modificare il campo Spatial Blend (Blend spaziale) impostandolo su 1
Nel riquadro Hierarchy (Gerarchia), espandere l'oggetto RoverAssembly > RoverModel_PlacementHints_XRay >Parts_PlacementHints in modo da rivelare tutti gli oggetti suggerimento di posizionamento, quindi selezionare la prima parte rover, RoverParts >Camera_Part e configurare il componente Part Assembly Controller (Script) (Controllo assembly parti - script) come indicato:
- Assegna l'oggetto Camera_PlacementHint al campo Location To Place (Punto di posizionamento)
Ripetere il passaggio 5 per ognuno degli oggetti parte rover rimanenti e per l'oggetto RoverAssembly per configurare il componente Part Assembly Controller (Script) (Controllo assembly parti - script) come indicato di seguito:
- Per Generator_Part, assegnare l'oggetto Generator_PlacementHint al campo Location To Place (Punto di posizionamento)
- Per Lights_Part, assegnare l'oggetto Lights_PlacementHint al campo Location To Place (Punto di posizionamento)
- Per UHFAntenna_Part, assegna l'oggetto UHFAntenna_PlacementHint al campo Location To Place (Punto di posizionamento)
- Per Spectrometer_Part, assegnare l'oggetto Spectrometer_PlacementHint al campo Location To Place
- Per RoverAssembly, assegnare l'oggetto stesso, ovvero l'oggetto RoverAssembly stesso, al campo Location To Place (Punto di posizionamento)
Nel riquadro Gerarchia selezionare l'oggetto pulsante RoverExplorer >Pulsanti >Reimposta e quindi nel riquadro Controllo configurare l'evento OnClicked () PressableButton con supporto per interazioni come indicato di seguito:
- Assegna l'oggetto RoverAssembly al campo None (Object) (Nessuno - Oggetto)
- Dall'elenco a discesa No Function (Nessuna funzione) selezionare PartAssemblyController>ResetPlacement () per impostare questa funzione come l'azione da eseguire quando viene attivato l'evento
Se si attiva ora la modalità di gioco, è possibile usare l'interazione da vicino o da lontano per posizionare le parti rover sul rover. Quando è vicina al suggerimento di posizionamento corrispondente, la parte si blocca in posizione e diventa parte del rover. Per reimpostare i posizionamenti, puoi scegliere il pulsante Reset (Reimposta):
Aggiungere il controllo dei limiti
Nella finestra Gerarchia selezionare l'oggetto RoverExplorer, quindi nella finestra Controllo usare il pulsante Aggiungi componente per aggiungere il componente BoundsControl. Deselezionare la casella di controllo accanto al componente per disabilitarlo per impostazione predefinita:
Nella finestra Progetto passare alla cartella Pacchetti>Manipolazione spaziale MRTK>BoundsControl>Prefabs, fare clic e trascinare il prefab BoundingBoxWithHandles il campo Prefab Bounds Visuals Prefab del componente Limita controllo.
Nel riquadro Gerarchia espandere l'oggetto Menu >Buttons-GridLayout (Buttons) in modo da rivelare i tre pulsanti, rinominare il terzo pulsante in BoundsControl_Enable, quindi nella finestra Gerarchia configurare l'oggetto gioco BoundsControl_Enable come segue:
- Selezionare l'oggetto Frontplate > AnimatedContent > Icona > Etichetta e modificare il componente TextMeshPro in Abilita. Assicurarsi che l'oggetto Etichetta sia attivato nella gerarchia
- Configurare l'evento PressableButton.OnClicked() assegnando l'oggetto RoverExplorer al campo Nessuno (Oggetto) e selezionando BoundsControl>bool Enabled nell'elenco a discesa Nessuna funzione (verificare che la casella di controllo argomento sia selezionata)
- Selezionare l'icona + piccola per aggiungere un altro evento
- Assegna l'oggetto RoverExplorer al campo None (Object) (Nessuno - Oggetto)
- Dall'elenco a discesa Nessuna funzione selezionare ObjectManipulator>bool Enabled per aggiornare il valore di questa proprietà quando viene attivato l'evento e verificare che la casella di controllo dell'argomento sia selezionata
- Selezionare l'icona + piccola per aggiungere un altro evento
- Assegna l'oggetto RoverExplorer al campo None (Object) (Nessuno - Oggetto)
- Dall'elenco a discesa Nessuna funzione selezionare BoundscoNTROL>bool HandlesActive per aggiornare il valore di questa proprietà quando viene attivato l'evento e verificare che la casella di controllo dell'argomento sia selezionata
- Selezionare l'oggetto Frontplate > AnimatedContent >> Icona UIButtonFontIcon e modificare l'icona nelle quattro frecce nel componente Selettore icona carattere. È possibile trovarlo nell'elenco delle icone o impostare ** Nome icona corrente** su "Icona 40"
Duplicare il pulsante BoundsControl_Enable e rinominarlo BoundsControl_Disable, quindi nel riquadro Controllo configurare il componente Helper configurazione pulsanti (Script) come indicato di seguito:
- Selezionare l'oggetto Frontplate > AnimatedContent > Icona > Etichetta e modificare il componente TextMeshPro in Disabilita
- Configurare l'evento PressableButton.OnClicked() assicurandosi che tutte le caselle di controllo sotto gli eventi siano deselezionate
Se si attiva la modalità gioco e si seleziona Enable (Abilita) per abilitare il controllo limiti, è possibile usare l'interazione da vicino o da lontano per spostare, ruotare e ridimensionare il controllo dei limiti e selezionare Disable (Disabilita) per disabilitare di nuovo il controllo dei limiti: