7. Interazione con oggetti 3D7. Interacting with 3D objects

In questa esercitazione apprenderai come abilitare la manipolazione da vicino e da lontano degli oggetti 3D e limitare i tipi di manipolazione consentiti.In this tutorial, you will learn how to enable near and far manipulation of 3D objects and limit the allowed types of manipulation. Apprenderai anche come aggiungere cubi di delimitazione intorno agli oggetti 3D per controllare più facilmente la manipolazione degli oggetti.You will also learn how to add bounding boxes around 3D objects to make it easier to control the object manipulation.

ObiettiviObjectives

  • Apprendere come configurare gli oggetti 3D in modo che sia possibile interagire con essiLearn how to configure 3D objects so they can be interacted with
  • Apprendere come aggiungere cubi di delimitazione a oggetti 3DLearn how to add bounding boxes to 3D objects

Manipolazione di oggetti 3DManipulating 3D objects

In questa sezione aggiungerai la possibilità di manipolare tutte le parti rover organizzate sul tavolo durante l'esercitazione Posizionamento degli oggetti nella scena.In this section, you will add the ability to manipulate all the Rover parts you organized on the table during the Positioning objects in the scene tutorial.

Di seguito sono elencati i passaggi principali da eseguire per ottenere questo risultato:The main steps you will take to achieve this are:

  1. Aggiungere il componente Object Manipulator (Script) (Manipolatore oggetti - script) a tutti gli oggetti parteAdd the Object Manipulator (Script) component to all the part objects
  2. Aggiungere il componente NearInteractionGrabbable a tutti gli oggetti parteAdd the NearInteractionGrabbable component to all the part objects
  3. Configurare il componente Object Manipulator (Script) (Manipolatore oggetti - script)Configure the Object Manipulator (Script) component

Nota

Per poter manipolare un oggetto, è necessario che l'oggetto abbia i componenti seguenti:To be able to manipulate an object, the object must have the following components:

  • Componente Collider (Collisore), ad esempio un collisore cuboideCollider component, for example, a Box Collider
  • Componente Object Manipulator (Script) (Manipolatore oggetti - script)Object Manipulator (Script) component

Per poter manipolare e afferrare un oggetto con le mani tracciate, è necessario che l'oggetto abbia i componenti seguenti:To be able to manipulate and grab an object with tracked hands, the object must have the following components:

  • Componente Collider (Collisore), ad esempio un collisore cuboideCollider component, for example, a Box Collider
  • Componente Object Manipulator (Script) (Manipolatore oggetti - script)Object Manipulator (Script) component
  • Componente NearInteractionGrabbableNearInteractionGrabbable component

Configurerai inoltre Rover Explorer (Esplora rover) in modo che sia possibile posizionare le parti rover sul rover per renderlo un assembly di rover completo.Additionally, you will configure the Rover Explorer so that you can place the rover parts on to the Rover to make it a complete rover assembly.

Nella finestra Hierarchy (Gerarchia) espandi l'oggetto RoverExplorer > RoverParts e seleziona tutti i relativi oggetti parte rover figlio e l'oggetto RoverAssembly, quindi nella finestra Inspector (Controllo) usa il pulsante Add Component (Aggiungi componente) per aggiungere i componenti seguenti a tutti gli oggetti selezionati:In the Hierarchy window, expand the RoverExplorer > RoverParts object and select all its child rover part objects and the RoverAssembly object, then in the Inspector window, use the Add Component button to add the following components to all the selected objects:

  • Componente Object Manipulator (Script) (Manipolatore oggetti - script)Object Manipulator (Script) component
  • Componente NearInteractionGrabbableNearInteractionGrabbable component
  • Componente Part Assembly Controller (Script) (Controllo assembly parti - script)Part Assembly Controller (Script) component

Unity con RoverAssembly e tutti gli oggetti parte rover selezionati e i componenti aggiunti

Suggerimento

Per selezionare più oggetti non adiacenti, tieni premuto CTRL mentre usi il mouse per selezionare un oggetto.To select multiple objects that are not next to each other, press-and-hold the CTRL key while using the mouse to select any object.

Nota

Ai fini di questa esercitazione, i collisori sono già stati aggiunti alle parti rover.For the purpose of this tutorial, colliders have already been added to the rover parts. Per altre informazioni sui collisori, puoi visitare la documentazione corrispondente di Unity.To learn more about colliders, you can visit Unity's Collider documentation.

Nota

Part Assembly Controller (Script) (Controllo assembly parti - script) non fa parte di MRTK, ma è stato incluso negli asset dell'esercitazione.The Part Assembly Controller (Script) is not part of the MRTK but was included with the tutorial assets.

Con tutti gli oggetti parte rover e l'oggetto RoverAssembly ancora selezionati, nella finestra Inspector (Controllo) configura il componente Object Manipulator (Script) (Manipolatore oggetti - script) come indicato di seguito:With all the rover part objects and the RoverAssembly object still selected, in the Inspector window, configure the Object Manipulator (Script) component as follows:

  • Dall'elenco a discesa Two Handed Manipulation Type (Tipo di manipolazione a due mani) deseleziona Scale (Scala) in modo che siano abilitate solo le opzioni Move (Sposta) e Rotate (Ruota)From the Two Handed Manipulation Type dropdown, uncheck the Scale, so only Move and Rotate is enabled

Unity con Two Handed Manipulation Type configurato

Nota

A questo punto hai abilitato la manipolazione per tutti gli oggetti parte rover e per l'oggetto RoverAssembly.At this point, you have enabled object manipulation for all the rover part objects and the RoverAssembly object.

Nella finestra Project (Progetto) passa alla cartella Assets (Asset) > MRTK > SDK > StandardAssets > Audio per individuare i clip audio:In the Project window, navigate to the Assets > MRTK > SDK > StandardAssets > Audio folder to locate the audio clips:

Finestra Project di Unity con la cartella Audio selezionata

Nella finestra Hierarchy (Gerarchia) seleziona di nuovo gli oggetti parte rover e quindi nella finestra Inspector (Controllo) usa il pulsante Add Component (Aggiungi componente) per aggiungere il componente Audio Sources (Origini audio) e configuralo come indicato di seguito:In the Hierarchy window, reselect all the rover part objects, then in the Inspector window, use the Add Component button to add the Audio Sources component and configure it as follows:

  • Assegna il clip audio MRTK_Scale_Start al campo AudioClipAssign the MRTK_Scale_Start audio clip to the AudioClip field
  • Deseleziona la casella di controllo Play On Awake (Riproduci quando operativo)Uncheck the Play On Awake checkbox
  • Modifica il campo Spatial Blend (Blend spaziale) impostandolo su 1Change Spatial Blend to 1

Unity con tutte le parti rover selezionate e il componente Audio Source aggiunto e configurato

Nella finestra Hierarchy (Gerarchia) espandi l'oggetto RoverAssembly > RoverModel_PlacementHints_XRay > Parts_PlacementHints in modo da rivelare tutti gli oggetti suggerimento di posizionamento, quindi scegli la prima parte rover, RoverParts > Camera_Part, e configura il componente Part Assembly Controller (Script) (Controllo assembly parti - script) come indicato di seguito:In the Hierarchy window, expand the RoverAssembly > RoverModel_PlacementHints_XRay > Parts_PlacementHints object to reveal all of the placement hint objects, then select the first rover part, RoverParts > Camera_Part, and configure the Part Assembly Controller (Script) component as follows:

  • Assegna l'oggetto Camera_PlacementHint al campo Location To Place (Punto di posizionamento)Assign the Camera_PlacementHint object to the Location To Place field

Unity con il componente PartAssemblyController di Camera_Part configurato

Ripeti questo passaggio 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:Repeat this step for each of the remaining rover part objects and the RoverAssembly object to configure the Part Assembly Controller (Script) component as follows:

  • Per Generator_Part, assegna l'oggetto Generator_PlacementHint al campo Location To Place (Punto di posizionamento)For the Generator_Part, assign the Generator_PlacementHint object to the Location To Place field
  • Per Lights_Part, assegna l'oggetto Lights_PlacementHint al campo Location To Place (Punto di posizionamento)For the Lights_Part, assign the Lights_PlacementHint object to the Location To Place field
  • Per UHFAntenna_Part, assegna l'oggetto UHFAntenna_PlacementHint al campo Location To Place (Punto di posizionamento)For the UHFAntenna_Part, assign the UHFAntenna_PlacementHint object to the Location To Place field
  • Per Spectrometer_Part, assegna l'oggetto Spectrometer_PlacementHint al campo Location To Place (Punto di posizionamento)For the Spectrometer_Part, assign the Spectrometer_PlacementHint object to the Location To Place field
  • Per RoverAssembly, assegna l'oggetto stesso., ovvero l'oggetto RoverAssembly stesso, al campo Location To Place (Punto di posizionamento)For the RoverAssembly, assign the object itself, i.e. the same RoverAssembly object, to the Location To Place field

Nella finestra Hierarchy (Gerarchia) seleziona l'oggetto pulsante RoverExplorer > Buttons (Pulsanti) > Reset (Reimposta) e quindi nella finestra Inspector (Controllo) configura l'evento OnClick () con supporto per interazioni come indicato di seguito:In the Hierarchy window, select the RoverExplorer > Buttons > Reset button object, then in the Inspector window, configure the Interactable OnClick () event as follows:

  • Assegna l'oggetto RoverAssembly al campo None (Object) (Nessuno - Oggetto)Assign the RoverAssembly object to the None (Object) field
  • Dall'elenco a discesa No Function (Nessuna funzione) seleziona PartAssemblyController > ResetPlacement () per impostare questa funzione come l'azione da eseguire quando viene attivato l'eventoFrom the No Function dropdown, select PartAssemblyController > ResetPlacement () to set this function as the action to be executed when the event is triggered

Unity con l'evento OnClick dell'oggetto pulsante Reset configurato

Se attivi ora la modalità di gioco, puoi usare l'interazione da vicino o da lontano per posizionare le parti rover sul rover.If you now enter Game mode, you can use near or far interaction to place the rover parts on to the Rover. Quando è vicina al suggerimento di posizionamento corrispondente, la parte si blocca in posizione e diventa parte del rover.Once the part is close to the corresponding placement hint, it will snap into place and become part of the Rover. Per reimpostare i posizionamenti, puoi scegliere il pulsante Reset (Reimposta):To reset the placements, you can press the Reset button:

Visualizzazione suddivisa della modalità di riproduzione in Unity con il pulsante Reset selezionato

Per altre informazioni sul componente Object Manipulator (Manipolatore oggetti) e sulle relative proprietà associate, puoi visitare la guida su tale componente nel portale della documentazione di MRTK.To learn more about the Object Manipulator component and its associated properties, you can visit the Object Manipulator guide in the MRTK Documentation Portal.

Aggiunta di cubi di delimitazioneAdding bounding boxes

I cubi di delimitazione consentono di manipolare gli oggetti con una mano in modo più semplice e intuitivo per l'interazione sia da vicino che da lontano, in quanto forniscono punti di manipolazione utilizzabili per il ridimensionamento e la rotazione.Bounding boxes make it easier and more intuitive to manipulate objects with one hand for both near and far interaction by providing handles that can be used for scaling and rotating.

In questo esempio aggiungerai un cubo di delimitazione all'oggetto RoverExplorer in modo da poter spostare, ruotare e ridimensionare facilmente l'intera esperienza.In this example, you will add a bounding box to the RoverExplorer object so the whole experience can easily be moved, rotated, and scaled. Configurerai inoltre il menu in modo che sia possibile abilitare e disabilitare il cubo di delimitazione.Additionally, you will configure the Menu so you can turn the Bounding Box on and off.

Nella finestra Hierarchy (Gerarchia) seleziona l'oggetto RoverExplorer, quindi nella finestra Inspector (Controllo) usa il pulsante Add Component (Aggiungi componente) per aggiungere i componenti seguenti:In the Hierarchy window, select the RoverExplorer object, then in the Inspector window, use the Add Component button to add the following components:

  • Componente BoundingBoxBoundingBox component
  • Componente Object Manipulator (Script) (Manipolatore oggetti - script)Object Manipulator (Script) component

Deseleziona quindi la casella di controllo accanto a entrambi i componenti in modo che siano disabilitati per impostazione predefinita:Then uncheck the checkbox next to both components to make them disabled by default:

Unity con l'oggetto RoverExplorer selezionato e i componenti aggiunti e disabilitati

Nota

La visualizzazione del cubo di delimitazione viene creata in fase di runtime e pertanto non è visibile prima di passare alla modalità di gioco.The Bounding Box visualization is created at runtime and, therefore, not visible before you enter Game mode.

Nota

Il componente BoundingBox aggiungerà automaticamente il componente NearInteractionGrabbable in fase di runtime.The BoundingBox component will automatically add the NearInteractionGrabbable component at runtime. Non è necessario pertanto aggiungere questo componente per afferrare con le mani tracciate gli oggetti racchiusi.Therefore, we do not need to add this component to grab the enclosed objects with tracked hands.

Nella finestra Hierarchy (Gerarchia) espandi l'oggetto Menu > ButtonCollection in modo da rivelare i quattro pulsanti e rinomina il terzo pulsante come BoundingBox_Enable, quindi nella finestra Inspector (Controllo) configura il componente Button Config Helper (Script) (Helper configurazione pulsanti - script) come indicato di seguito:In the Hierarchy window, expand the Menu > ButtonCollection object to reveal the four buttons and rename the third button to BoundingBox_Enable, then in the Inspector window, configure the Button Config Helper (Script) component as follows:

  • Imposta Main Label Text (Testo etichetta principale) su Enable (Abilita)Change the Main Label Text to Enable
  • Assegna l'oggetto RoverExplorer al campo None (Object) (Nessuno - Oggetto)Assign the RoverExplorer object to the None (Object) field
  • Dall'elenco a discesa No Function (Nessuna funzione) seleziona BoundingBox > bool Enabled per aggiornare il valore di questa proprietà quando viene attivato l'eventoFrom the No Function dropdown, select BoundingBox > bool Enabled to update this property value when the event is triggered
  • Verifica che la casella di controllo dell'argomento sia selezionataVerify that the argument checkbox is checked
  • Fai clic sull'icona + piccola per aggiungere un altro eventoClick the small + icon to add another event
  • Assegna l'oggetto RoverExplorer al campo None (Object) (Nessuno - Oggetto)Assign the RoverExplorer object to the None (Object) field
  • Dall'elenco a discesa No Function (Nessuna funzione) seleziona ObjectManipulator > bool Enabled per aggiornare il valore di questa proprietà quando viene attivato l'eventoFrom the No Function dropdown, select ObjectManipulator > bool Enabled to update this property value when the event is triggered
  • Verifica che la casella di controllo dell'argomento sia selezionataVerify that the argument checkbox is checked
  • Lascia per Icon (Icona) l'impostazione di icona 'cubo con cubo di delimitazione'Leave the Icon as the 'cube with bounding box' icon

Unity con l'oggetto pulsante BoundingBox_Enable selezionato e il componente Button Config Helper configurato

Rinomina il quarto e ultimo pulsante come BoundingBox_Disable, quindi nella finestra Inspector (Controllo) configura il componente Button Config Helper (Script) (Helper configurazione pulsanti - script) come indicato di seguito:Rename the forth and last button to BoundingBox_Disable, then in the Inspector window, configure the Button Config Helper (Script) component as follows:

  • Imposta Main Label Text (Testo etichetta principale) su Disable (Disabilita)Change the Main Label Text to Disable
  • Assegna l'oggetto RoverExplorer al campo None (Object) (Nessuno - Oggetto)Assign the RoverExplorer object to the None (Object) field
  • Dall'elenco a discesa No Function (Nessuna funzione) seleziona BoundingBox > bool Enabled per aggiornare il valore di questa proprietà quando viene attivato l'eventoFrom the No Function dropdown, select BoundingBox > bool Enabled to update this property value when the event is triggered
  • Verifica che la casella di controllo dell'argomento sia deselezionataVerify that the argument checkbox is unchecked
  • Fai clic sull'icona + piccola per aggiungere un altro eventoClick the small + icon to add another event
  • Assegna l'oggetto RoverExplorer al campo None (Object) (Nessuno - Oggetto)Assign the RoverExplorer object to the None (Object) field
  • Dall'elenco a discesa No Function (Nessuna funzione) seleziona ObjectManipulator > bool Enabled per aggiornare il valore di questa proprietà quando viene attivato l'eventoFrom the No Function dropdown, select ObjectManipulator > bool Enabled to update this property value when the event is triggered
  • Verifica che la casella di controllo dell'argomento sia deselezionataVerify that the argument checkbox is unchecked
  • Modifica l'impostazione di Icon (Icona) configurando l'icona 'cubo con cubo di delimitazione'Change the Icon to the 'cube with bounding box" icon

Unity con l'oggetto pulsante BoundingBox_Disable selezionato e il componente Button Config Helper configurato

Se ora attivi la modalità di gioco e abiliti il cubo di delimitazione facendo clic sul pulsante Enable (Abilita), puoi usare l'interazione da vicino o da lontano per spostare, ruotare e ridimensionare il cubo di delimitazione e usare il pulsante Disable (Disabilita) per disabilitare nuovamente il cubo di delimitazione:If you now enter Game mode and enable the Bounding Box by clicking the Enable button, you can use near or far interaction to move, rotate, and scale the Bounding Box, and use the Disable button to disable the Bounding Box again:

Visualizzazione suddivisa della modalità di riproduzione in Unity con manipolazione del cubo di delimitazione in corso

Per altre informazioni sul componente Bounding Box (Cubo di delimitazione) e sulle relative proprietà associate, puoi visitare la guida su tale componente nel portale della documentazione di MRTK.To learn more about the Bounding Box component and its associated properties, you can visit the Bounding box guide in the MRTK Documentation Portal.

Lezione completataCongratulations

In questa esercitazione hai appreso come abilitare la manipolazione da vicino e da lontano degli oggetti 3D e limitare i tipi di manipolazione consentiti.In this tutorial, you learned how to enable near and far manipulation for 3D objects and how to limit the allowed types of manipulation. Hai appreso anche come aggiungere cubi di delimitazione intorno agli oggetti 3D per controllare più facilmente la manipolazione degli oggetti.You also learned how to add bounding boxes around 3D objects to make it easier to control the object manipulation.