Ejercicio: Manipulación de objetos 3D mediante el control de límites

Completado

El script ObjectManipulator hace que un objeto se pueda mover, escalar y girar con una o las dos manos. Este script es compatible con el modelo de entrada de manipulación directa, porque permite al usuario tocar los hologramas directamente con las manos. Aquí, use ObjectManipulator para habilitar las interacciones con las manos para que pueda mover, escalar y girar el explorador de róver.

  1. Además, configurará el explorador de róver para que pueda colocar las piezas de róver en el róver y hacer que sea un ensamblado de róver completo. En el panel Hierarchy (Jerarquía), expanda el objeto RoverExplorer >RoverParts y seleccione todos sus objetos de componente de róver secundarios y el objeto RoverAssembly y, después, en el panel Inspector, use el botón Add Component (Agregar componente) para agregar los siguientes componentes a todos los objetos seleccionados:

    • Componente Object Manipulator (Script) (Manipulador de objetos [script])
    • Componente Part Assembly Controller (Script) (Controlador de ensamblado de partes [script])

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

  2. Con todos los objetos de pieza de róver y el objeto RoverAssembly aún seleccionados, en el panel Inspector, configure el componente Object Manipulator (Script) (Manipulador de objetos [script]), como se muestra a continuación:

    • En Configuración de componente interactuable base, busque el evento On Clicked () (Al hacer clic). Seleccione el icono + para agregar un nuevo evento. Configure el evento de la siguiente manera:

      a. Asigne el objeto RoverAssembly como agente de escucha para el evento On Clicked (), arrastrándolo desde Jerarquía al campo None (Object).

      b. Desde la lista desplegable Sin función, seleccione TapToPlace>StartPlacement() para llamar a este método cuando se desencadene el evento.

    • En la lista desplegable Tipo de manipulación permitido, desactive la casilla Escala, de tal modo que solo se habilite Mover y Girar:

    Screenshot of Unity with Two Handed Manipulation Type configured.

  3. Seleccione solo el objeto RoverAssembly y quite el componente Interactuable con estado en él, si existiera. Seleccione los tres puntos situados en el extremo derecho del componente y, después, seleccione Quitar componente.

  4. En el panel Proyecto, vaya a la carpeta Paquetes>Recursos estándar del MRTK>Audio>HoloLens2 para buscar los clips de audio:

    Screenshot of Unity Project window with Audio folder selected.

  5. En el panel Hierarchy (Jerarquía), vuelva a seleccionar todos los objetos de pieza de Rover y, a continuación, en el panel Inspector, seleccione Add Component (Agregar componente) para agregar el componente Audio Sources (Orígenes de audio) y configúrelo de la siguiente manera:

    • Asigne el clip de audio MRTK_Scale_Start al campo AudioClip.
    • Desactive la casilla Play On Awake (Reproducir al reactivar).
    • Cambio de Spatial Blend (Mezcla espacial) a 1

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

  6. En el panel 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, después, seleccione la primera pieza del róver, RoverParts >Camera_Part, y configure el componente Part Assembly Controller (Script) (Controlador de ensamblado de piezas [script]) como se muestra a continuación:

    • Asigne el objeto Camera_PlacementHint al campo Location To Place (Ubicación de colocación).

    Screenshot of Unity with Camera_Part PartAssemblyController component configured.

  7. Repita el paso 5 para cada uno de los objetos de pieza de róver restantes y el objeto RoverAssembly para configurar el componente Part Assembly Controller (Script) (Controlador de ensamblado de piezas [script]) de la manera siguiente:

    • Para Generator_Part, asigne el objeto Generator_PlacementHint al campo Location to Place (Ubicación para colocar)
    • Para Lights_Part, asigne el objeto Lights_PlacementHint al campo Location to Place (Ubicación para colocar)
    • Para UHFAntenna_Part, asigne el objeto UHFAntenna_PlacementHint al campo Location to Place (Ubicación para colocar)
    • Para la parte Spectrometer_Part, asigne el objeto Spectrometer_PlacementHint al campo Location To Place (Ubicación de colocación).
    • Para RoverAssembly, asigne el propio objeto, es decir, el mismo objeto RoverAssembly, al campo Location To Place (Ubicación para colocar)
  8. En el panel Jerarquía, seleccione el objeto de botón RoverExplorer > Botones >Restablecer y, después, en la ventana Inspector, configure el evento OnClicked () de PressableButton como se muestra a continuación:

    • Asigne el objeto RoverAssembly al campo None (Object) (Ninguno [objeto]).
    • En la lista desplegable No Function (Ninguna función), seleccione PartAssemblyController>ResetPlacement () para establecer esta función como la acción que se ejecutará cuando se desencadene el evento

    Screenshot of Unity with Reset button object OnClick event configured.

  9. Si ahora entra en el modo de juego, puede usar la interacción cercana o lejana para colocar las piezas del róver en el róver. 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. Para restablecer las ubicaciones, puede presionar el botón Restablecer:

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

Agregar control de límites

  1. En la ventana Jerarquía, seleccione el objeto RoverExplorer y, después, en la ventana Inspector, use el botón Agregar componente para agregar el componente BoundsControl. Desactive la casilla situada junto al componente para deshabilitarla de forma predeterminada:

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

  2. En la ventana Proyecto, vaya a la carpeta Paquetes>Manipulación espacial de MRKT>BoundsControl>Objetos prefabricados, haga clic y arrastre el objeto prefabricado BoundingBoxWithHandles del campo Objeto prefabricado de visualización de límites del componente Control de límites.

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

  3. En el panel Jerarquía, expanda el objeto Menú >Buttons-GridLayout (Botones) para mostrar los tres botones. Cambie el nombre del tercer botón a BoundsControl_Enable y, después, en la ventana Jerarquía, configure el objeto de juego BoundsControl_Enable como se muestra a continuación:

    • Seleccione el objeto Frontplate > AnimatedContent > Icono > Etiqueta y cambie el componente TextMeshPro a Habilitar. Asegúrese de que el objeto Etiqueta esté activado en la jerarquía
    • Configure el evento PressableButton.OnClicked() asignando el objeto RoverExplorer al campo None (Object) y seleccionando BoundsControl>valor booleano habilitado en la lista desplegable Sin función (compruebe que la casilla de verificación del argumento está activada)
    • Seleccione el icono + pequeño para agregar otro evento
    • Asigne el objeto RoverExplorer al campo None (Object) (Ninguno [objeto]).
    • En la lista desplegable Sin función, seleccione ObjectManipulator>valor booleano habilitado para actualizar este valor de propiedad cuando se desencadene el evento y comprobar que la casilla del argumento esté marcada
    • Seleccione el icono + pequeño para agregar otro evento
    • Asigne el objeto RoverExplorer al campo None (Object) (Ninguno [objeto]).
    • En la lista desplegable Sin función, seleccione BoundsControl>valor booleano HandlesActive para actualizar este valor de propiedad cuando se desencadene el evento y comprobar que la casilla del argumento esté marcada
    • Seleccione el objeto Frontplate > AnimatedContent > Icono > UIButtonFontIcon y cambie el Icono al icono de cuatro flechas en el componente Selector de icono de fuente. Puede encontrarlo en la lista de iconos o establecer ** Nombre del icono actual** como "Icono 40"

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

  4. Duplique el botón BoundsControl_Enable y cambie su nombre por BoundsControl_Disable. Después, en el panel Inspector, configure el componente Asistente de configuración de botones (script) como se muestra a continuación:

    • Seleccione el objeto Frontplate > AnimatedContent > Icono > Etiqueta y cambie el componente TextMeshPro a Deshabilitar
    • Configure el evento PressableButton.OnClicked() asegurándose de que todas las casillas de los eventos estén desactivadas

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

  5. Si ahora entra en el modo de juego y selecciona Enable (Habilitar) para habilitar el control de límites, puede usar la interacción cercana o lejana para mover, girar y escalar el control de límites y seleccionar Disable (Deshabilitar) para volver a deshabilitar el control de límites:

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