7. Interacción con objetos 3D7. Interacting with 3D objects

En este tutorial, aprenderá a habilitar la manipulación cercana y lejana de objetos 3D y a limitar los tipos de manipulación permitidos.In this tutorial, you will learn how to enable near and far manipulation of 3D objects and limit the allowed types of manipulation. También aprenderá a agregar cuadros de límite alrededor de objetos 3D para facilitar el control de la manipulación de objetos.You will also learn how to add bounding boxes around 3D objects to make it easier to control the object manipulation.

ObjetivosObjectives

  • Aprender a configurar objetos 3D para poder interactuar con ellosLearn how to configure 3D objects so they can be interacted with
  • Aprender a agregar cuadros de límite a objetos 3DLearn how to add bounding boxes to 3D objects

Manipulación de objetos 3DManipulating 3D objects

En esta sección, agregará la capacidad de manipular todas las partes del róver que organizó en la tabla durante el tutorial Posicionamiento de los objetos en la escena.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.

Los principales pasos que debes seguir para lograrlo son:The main steps you will take to achieve this are:

  1. Agregar el componente Object Manipulator (Script) (Manipulador de objetos [script]) a todos los objetos de las partesAdd the Object Manipulator (Script) component to all the part objects
  2. Agregar el componente NearInteractionGrabbable a todos los objetos de las partesAdd the NearInteractionGrabbable component to all the part objects
  3. Configurar el componente Object Manipulator (Script) (Manipulador de objetos [script])Configure the Object Manipulator (Script) component

Nota

Para poder manipular un objeto, el objeto debe tener los siguientes componentes:To be able to manipulate an object, the object must have the following components:

  • Componente Collider; por ejemplo, un colisionador de cuadroCollider component, for example, a Box Collider
  • Componente Object Manipulator (Script) (Manipulador de objetos [script])Object Manipulator (Script) component

Para poder manipular y agarrar un objeto con seguimiento de manos, el objeto debe tener los componentes siguientes:To be able to manipulate and grab an object with tracked hands, the object must have the following components:

  • Componente Collider; por ejemplo, un colisionador de cuadroCollider component, for example, a Box Collider
  • Componente Object Manipulator (Script) (Manipulador de objetos [script])Object Manipulator (Script) component
  • Componente NearInteractionGrabbableNearInteractionGrabbable component

Además, configurará el explorador del róver a fin de poder colocarle las partes y crear un ensamblado 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.

En la ventana Hierarchy (Jerarquía), expanda el objeto RoverExplorer > RoverParts y seleccione todos los objetos secundarios de la parte, así como el objeto RoverAssembly, y, a continuación, en la ventana Inspector, use el botón Add Component (Agregar componente) para agregar los siguientes componentes a todos los objetos seleccionados: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) (Manipulador de objetos [script])Object Manipulator (Script) component
  • Componente NearInteractionGrabbableNearInteractionGrabbable component
  • Componente Part Assembly Controller (Script) (Controlador de ensamblado de partes [script])Part Assembly Controller (Script) component

Unity con RoverAssembly y todos los objetos de partes del róver seleccionados y los componentes agregados

Sugerencia

Para seleccionar varios objetos que no estén juntos entre sí, mantenga presionada la tecla Control mientras usa el mouse para seleccionar cualquier objeto.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

Para los fines de este tutorial, los colisionadores ya se han agregado a las partes del róver.For the purpose of this tutorial, colliders have already been added to the rover parts. Para obtener más información sobre los colisionadores, visita la documentación sobre colisionadores de Unity.To learn more about colliders, you can visit Unity's Collider documentation.

Nota

El controlador Part Assembly Controller (Script) (Controlador de ensamblado de partes [script]) no forma parte de MRTK, pero se incluyó con los recursos del tutorial.The Part Assembly Controller (Script) is not part of the MRTK but was included with the tutorial assets.

Con todos los objetos de las partes de róver y el objeto RoverAssembly todavía seleccionados, en la ventana Inspector, configure el componente Object Manipulator (Script) (Manipulador de objetos [script]) como se indica a continuación:With all the rover part objects and the RoverAssembly object still selected, in the Inspector window, configure the Object Manipulator (Script) component as follows:

  • En la lista desplegable Two Handed Manipulation Type (Tipo de manipulación con dos manos), desactive la escala, de modo que solo queden habilitadas las opciones Mover y Girar.From the Two Handed Manipulation Type dropdown, uncheck the Scale, so only Move and Rotate is enabled

Unity con Two Handed Manipulation Type (Tipo de manipulación con dos manos) configurado

Nota

En este punto, ha habilitado la manipulación de objetos para todos los objetos de las piezas de Rover y el objeto RoverAssembly.At this point, you have enabled object manipulation for all the rover part objects and the RoverAssembly object.

En la ventana Proyecto, navegue hasta la carpeta Recursos > MRTK > SDK > StandardAssets > Audio para buscar los clips de audio:In the Project window, navigate to the Assets > MRTK > SDK > StandardAssets > Audio folder to locate the audio clips:

Ventana Project (Proyecto) de Unity con la carpeta Audio seleccionada

En la ventana Hierarchy (Jerarquía), seleccione todos los objetos de las partes del róver y, a continuación, en la ventana Inspector, use el botón Add Component (Agregar componente) para agregar el componente Audio sources (Orígenes de audio) y configurarlo del modo siguiente: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:

  • Asigne el clip de audio MRTK_Scale_Start al campo AudioClip.Assign the MRTK_Scale_Start audio clip to the AudioClip field
  • Desactive la casilla Play On Awake (Reproducir al reactivar).Uncheck the Play On Awake checkbox
  • Cambie Spatial Blend a 1.Change Spatial Blend to 1

Unity con todas las partes del róver seleccionadas y el componente Audio Source (Origen de audio) agregado y configurado

En la ventana Hierarchy (Jerarquía), expanda el objeto RoverAssembly > RoverModel_PlacementHints_XRay > Parts_PlacementHints para mostrar todos los objetos de sugerencia de selección de ubicación y, a continuación, seleccione la primera parte de róver, RoverParts > Camera_Part y configure el componente Part Assembly Controller (Script) (Controlador de ensamblado de partes [script]) de la siguiente manera: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:

  • Asigne el objeto Camera_PlacementHint al campo Location To Place (Ubicación de colocación).Assign the Camera_PlacementHint object to the Location To Place field

Unity con el componente Camera_Part PartAssemblyController configurado

Repita este paso para cada uno de los objetos de las partes de róver restantes y el objeto RoverAssembly con tal de configurar el componente Part Assembly Controller (Script) (Controlador de ensamblado de partes [script]) de la manera siguiente: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:

  • Para la parte Generator_Part, asigne el objeto Generator_PlacementHint al campo Location To Place (Ubicación de colocación).For the Generator_Part, assign the Generator_PlacementHint object to the Location To Place field
  • Para la parte Lights_Partt, asigne el objeto Lights_PlacementHint al campo Location To Place (Ubicación de colocación).For the Lights_Part, assign the Lights_PlacementHint object to the Location To Place field
  • Para la parte UHFAntenna_Part, asigne el objeto UHFAntenna_PlacementHint al campo Location To Place (Ubicación de colocación).For the UHFAntenna_Part, assign the UHFAntenna_PlacementHint object to the Location To Place field
  • Para la parte Spectrometer_Part, asigne el objeto Spectrometer_PlacementHint al campo Location To Place (Ubicación de colocación).For the Spectrometer_Part, assign the Spectrometer_PlacementHint object to the Location To Place field
  • Para el elemento RoverAssembly, asigne el propio objeto, es decir, el mismo objeto RoverAssembly, en el campo Location To Place (Ubicación de colocación).For the RoverAssembly, assign the object itself, i.e. the same RoverAssembly object, to the Location To Place field

En la ventana Hierarchy (Jerarquía), seleccione el objeto del botón RoverExplorer > Buttons > Reset (RoverExplorer > Botones > Restablecer) y, a continuación, en la ventana Inspector, configure el evento OnClick () de interacción de la siguiente manera:In the Hierarchy window, select the RoverExplorer > Buttons > Reset button object, then in the Inspector window, configure the Interactable OnClick () event as follows:

  • Asigne el objeto RoverAssembly al campo None (Object) (Ninguno [objeto]).Assign the RoverAssembly object to the None (Object) field
  • En la lista desplegable No Function (Ninguna función), seleccione PartAssemblyController > ResetPlacement () para establecer esta función como la acción que se va a ejecutar cuando se desencadene el evento.From the No Function dropdown, select PartAssemblyController > ResetPlacement () to set this function as the action to be executed when the event is triggered

Unity con el evento OnClick del objeto de botón Reset configurado

Si ahora entra en el Modo Juego, podrá usar la interacción cercana o lejana para colocar las partes en el róver.If you now enter Game mode, you can use near or far interaction to place the rover parts on to the Rover. Una vez que la parte esté cerca de la sugerencia de ubicación correspondiente, se ajustará en su lugar y pasará a ser una parte del róver.Once the part is close to the corresponding placement hint, it will snap into place and become part of the Rover. Para restablecer las ubicaciones, puede presionar el botón Restablecer:To reset the placements, you can press the Reset button:

Vista dividida del modo de reproducción de Unity con el botón Reset presionado

Para obtener más información sobre el componente Object Manipulator (Manipulador de objetos) y sus propiedades asociadas, consulte la guía Manipulador de objetos en el portal de documentación de 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.

Adición de cuadros de límiteAdding bounding boxes

Los cuadros de límite hacen que manipular objetos con una mano sea más sencillo e intuitivo tanto para la interacción próxima como remota, ya que proporcionan controladores que se pueden usar para el escalado y la rotación.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.

En este ejemplo, agregará un cuadro de límite al objeto RoverExplorer para que toda la experiencia se pueda desplazar, girar y escalar fácilmente.In this example, you will add a bounding box to the RoverExplorer object so the whole experience can easily be moved, rotated, and scaled. Además, configurará el menú para poder activar y desactivar el cuadro de límite.Additionally, you will configure the Menu so you can turn the Bounding Box on and off.

En la ventana Hierarchy (Jerarquía), seleccione el objeto RoverExplorer y, a continuación, en la ventana Inspector, use el botón Add Component (Agregar componente) para agregar los componentes siguientes: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) (Manipulador de objetos [script])Object Manipulator (Script) component

A continuación, desactive la casilla situada junto a ambos componentes para que estén deshabilitados de forma predeterminada:Then uncheck the checkbox next to both components to make them disabled by default:

Unity con el objeto RoverExplorer seleccionado y los componentes agregados y deshabilitados

Nota

La visualización del cuadro de límite se crea en tiempo de ejecución y, por tanto, no es visible antes de entrar en el Modo Juego.The Bounding Box visualization is created at runtime and, therefore, not visible before you enter Game mode.

Nota

El componente BoundingBox agregará automáticamente el componente NearInteractionGrabbable en tiempo de ejecución.The BoundingBox component will automatically add the NearInteractionGrabbable component at runtime. Por lo tanto, no es necesario agregar este componente para agarrar los objetos delimitados con las manos con seguimiento.Therefore, we do not need to add this component to grab the enclosed objects with tracked hands.

En la ventana Hierarchy (Jerarquía), expanda el objeto Menu (Menú) > ButtonCollection para mostrar los cuatro botones. Cambie el nombre del tercer botón a BoundingBox_Enable y, a continuación, en la ventana Inspector, configure el componente Button Config Helper (Script) (Asistente de configuración del botón [script]) como se indica a continuación: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:

  • Cambie el valor Main Label Text (Texto de la etiqueta principal) a Habilitar.Change the Main Label Text to Enable
  • Asigne el objeto RoverExplorer al campo None (Object) (Ninguno [objeto]).Assign the RoverExplorer object to the None (Object) field
  • En la lista desplegable No Function (Ninguna función), seleccione BoundingBox > bool Enabled (Booleano habilitado) para actualizar el valor de esta propiedad cuando se desencadene el evento.From the No Function dropdown, select BoundingBox > bool Enabled to update this property value when the event is triggered
  • Verifique que la casilla del argumento esté activada.Verify that the argument checkbox is checked
  • Haga clic en el icono + pequeño para agregar otro evento.Click the small + icon to add another event
  • Asigne el objeto RoverExplorer al campo None (Object) (Ninguno [objeto]).Assign the RoverExplorer object to the None (Object) field
  • En la lista desplegable No Function (Ninguna función), seleccione ObjectManipulator > bool Enabled (Booleano habilitado) para actualizar el valor de esta propiedad cuando se desencadene el evento.From the No Function dropdown, select ObjectManipulator > bool Enabled to update this property value when the event is triggered
  • Verifique que la casilla del argumento esté activada.Verify that the argument checkbox is checked
  • Deje el icono como el icono "cubo con cuadro de límite".Leave the Icon as the 'cube with bounding box' icon

Unity con el objeto de botón BoundingBox_Enable seleccionado y el componente Button Config Helper (Asistente de configuración del botón) configurado

Cambie el nombre del cuarto y el último botón por BoundingBox_Disable y, a continuación, en la ventana Inspector, configure el componente Button Config Helper (Script) (Asistente de configuración del botón [script]) de la siguiente manera:Rename the forth and last button to BoundingBox_Disable, then in the Inspector window, configure the Button Config Helper (Script) component as follows:

  • Cambie el valor Main Label Text (Texto de la etiqueta principal) a Deshabilitar.Change the Main Label Text to Disable
  • Asigne el objeto RoverExplorer al campo None (Object) (Ninguno [objeto]).Assign the RoverExplorer object to the None (Object) field
  • En la lista desplegable No Function (Ninguna función), seleccione BoundingBox > bool Enabled (Booleano habilitado) para actualizar el valor de esta propiedad cuando se desencadene el evento.From the No Function dropdown, select BoundingBox > bool Enabled to update this property value when the event is triggered
  • Verifique que la casilla del argumento esté desactivada.Verify that the argument checkbox is unchecked
  • Haga clic en el icono + pequeño para agregar otro evento.Click the small + icon to add another event
  • Asigne el objeto RoverExplorer al campo None (Object) (Ninguno [objeto]).Assign the RoverExplorer object to the None (Object) field
  • En la lista desplegable No Function (Ninguna función), seleccione ObjectManipulator > bool Enabled (Booleano habilitado) para actualizar el valor de esta propiedad cuando se desencadene el evento.From the No Function dropdown, select ObjectManipulator > bool Enabled to update this property value when the event is triggered
  • Verifique que la casilla del argumento esté desactivada.Verify that the argument checkbox is unchecked
  • Deje el icono como el icono "cubo con cuadro de límite".Change the Icon to the 'cube with bounding box" icon

Unity con el objeto de botón BoundingBox_Disable seleccionado y el componente Button Config Helper (Asistente de configuración del botón) configurado

Si ahora entra en el Modo Juego y habilita el cuadro de límite haciendo clic en el botón Habilitar, podrá usar la interacción cercana o lejana para desplazar, girar y escalar el cuadro de límite, así como usar el botón Deshabilitar para deshabilitar de nuevo el cuadro de límite: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:

Vista dividida del modo de reproducción de Unity con el cuadro de límite manipulado

Para obtener más información sobre el componente de cuadro de límite y sus propiedades asociadas, puedes visitar la guía sobre el cuadro de límite en el portal de documentación de 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.

EnhorabuenaCongratulations

En este tutorial, aprendió a habilitar la manipulación cercana y lejana de objetos 3D y a limitar los tipos de manipulación permitidos.In this tutorial, you learned how to enable near and far manipulation for 3D objects and how to limit the allowed types of manipulation. También aprendió a agregar cuadros de límite alrededor de objetos 3D para facilitar el control de la manipulación de objetos.You also learned how to add bounding boxes around 3D objects to make it easier to control the object manipulation.