Esercizio - Manipolare oggetti 3D usando il controllo dei limiti

Completato

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).

  1. 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)

    Screenshot of RoverAssembly with all rover part objects selected and components added.

  2. 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:

    Screenshot of Unity with Two Handed Manipulation Type configured.

  3. 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.

  4. Nel riquadro Project (Progetto), passare alla cartella Pacchetti>Asset MRTK Standard>Audio>HoloLens2 per individuare le clip audio:

    Screenshot of Unity Project window with Audio folder selected.

  5. 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

    Screenshot of Unity with all rover parts selected and Audio Source component added and configured.

  6. 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)

    Screenshot of Unity with Camera_Part PartAssemblyController component configured.

  7. 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)
  8. 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

    Screenshot of Unity with Reset button object OnClick event configured.

  9. 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):

    Screenshot of Unity Play mode split view with Reset button being pressed.

Aggiungere il controllo dei limiti

  1. 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:

    Screenshot of Unity with RoverExplorer object selected and components added and disabled.

  2. 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.

    Screenshot of Unity with RoverExplorer object selected and the Bounds Visuals Prefab field configured.

  3. 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"

    Screenshot of Unity with BoundsControl_Enable button object selected and Button Config Helper component configured.

  4. 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

    Screenshot of Unity with BoundsControl_Disable button object selected and Button Config Helper component configured.

  5. 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:

    Screenshot of Unity Play mode split view with Bounds Control being manipulated.