Cómo desarrollar con Unity para Android XR

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Visores de realidad extendida
Lentes de realidad extendida con cable

En esta guía, se proporciona una descripción general del desarrollo con Unity para Android XR. Android XR funciona con las herramientas y funciones conocidas que esperas de Unity y, como la compatibilidad de Unity con Android XR se basa en OpenXR, muchas de las funciones que se describen en la descripción general de OpenXR también se admiten en Unity.

Sigue esta guía para aprender lo siguiente:

  • Compatibilidad de Unity con Android XR
    • Conceptos básicos de Unity XR
    • Desarrolla y publica apps para Android XR
    • Paquetes de Unity para Android XR
      • Unity OpenXR: Paquete de Android XR
      • Extensiones de Android XR para Unity
      • Consideraciones sobre las funciones y la compatibilidad
  • Entrada e interacción

Compatibilidad de Unity con Android XR

Cuando creas apps de Unity para Android XR, puedes aprovechar las herramientas y capacidades de realidad mixta de las versiones más recientes de Unity 6. Esto incluye plantillas de realidad mixta que usan el XR Interaction Toolkit, AR Foundation y el complemento de OpenXR para ayudarte a comenzar rápidamente. Cuando compiles apps con Unity para Android XR, te recomendamos que uses la canalización de renderización universal (URP) como canalización de renderización y Vulkan como API de gráficos. Estas funciones te permiten aprovechar algunas de las funciones de gráficos de Unity, que solo son compatibles con Vulkan. Consulta la guía de configuración del proyecto para obtener más información sobre cómo establecer estos parámetros.

Conceptos básicos de Unity XR

Si no tienes experiencia en el desarrollo de Unity o XR, puedes consultar el manual de XR de Unity para comprender los conceptos y flujos de trabajo básicos de XR. El manual de XR contiene información sobre lo siguiente:

Desarrolla y publica apps para Android

Unity proporciona documentación detallada para desarrollar, compilar y publicar para Android, que abarca temas como los permisos de Android en Unity, la configuración de compilación de Android, la compilación de tu app para Android y la entrega a Google Play.

Paquetes de Unity para Android XR

Existen dos paquetes que proporcionan compatibilidad para compilar apps de Unity para Android XR. Ambos paquetes son complementos de proveedores de RE, que se pueden habilitar a través del paquete de administración de complementos de RE de Unity. El administrador de complementos de XR agrega la configuración del proyecto para administrar y ofrecer ayuda con la carga, la inicialización, la configuración y la compatibilidad de compilación para los complementos de XR. Para permitir que tu app ejecute funciones de OpenXR durante el tiempo de ejecución, el proyecto debe tener habilitadas estas funciones a través del administrador de complementos.

En esta imagen, se muestra un ejemplo de dónde puedes habilitar estos grupos de funciones a través del editor de Unity.

Figura 1: Ejemplo de la pantalla Unity XR Plug-in Management

Unity OpenXR Android XR

El paquete de Unity OpenXR para Android XR es un complemento de XR que agrega compatibilidad con Android XR a Unity. Este complemento de XR proporciona la mayor parte de la compatibilidad de Android XR con Unity y habilita la compatibilidad de dispositivos Android XR con proyectos de AR Foundation. AR Foundation está diseñado para desarrolladores que quieren crear experiencias de RA o realidad mixta. Proporciona la interfaz para las funciones de RA, pero no implementa ninguna función por sí misma. El paquete de Android XR de Unity OpenXR proporciona la implementación. Para comenzar a usar este paquete, consulta el manual del paquete, que contiene una guía de introducción.

Extensiones de Android XR para Unity

Las extensiones de Android XR para Unity complementan el paquete de Android XR de OpenXR de Unity y, además, incluyen funciones adicionales para ayudarte a crear experiencias envolventes. Se puede usar solo o junto con el paquete de Android XR de Unity OpenXR.

Para comenzar a usar este paquete, sigue nuestra guía de configuración del proyecto o la guía de inicio rápido para importar las extensiones de Android XR para Unity.

Consideraciones sobre las funciones y la compatibilidad

En la siguiente tabla, se describen las funciones que admiten los paquetes Unity OpenXR: Android XR y Android XR Extensions para Unity. Puedes usarla para determinar qué paquete contiene las funciones que necesitas y las consideraciones de compatibilidad.

Función

Unity OpenXR: Cadena de funciones de Android XR

Cadena de funciones de Android XR Extensions para Unity

Casos de uso y comportamiento esperado

Sesión de RA

Android XR: Sesión de RA

  • La configuración de funciones incluye Optimizar descartes de búfer (Vulkan)

Android XR (extensiones): Administración de sesiones

  • La configuración de funciones incluye Subsampling (Vulkan) y URP SpaceWarp (Vulkan)

Para usar las funciones de cualquiera de los paquetes, debes habilitar la función de sesión de RA para ese paquete. Puedes habilitar ambos conjuntos de funciones al mismo tiempo; las funciones individuales controlarán los conflictos según corresponda.

Seguimiento de dispositivos

N/A

N/A

El seguimiento de dispositivos se usa para seguir la posición y la rotación del dispositivo en el espacio físico. El GameObject de XR Origin controla automáticamente el seguimiento de dispositivos y la transformación de los elementos rastreables en el sistema de coordenadas de Unity con su componente XROrigin y la jerarquía de GameObject con una cámara y un TrackedPoseDriver.

Cámara

Android XR: Cámara de RA

N/A

Esta función proporciona compatibilidad con la estimación de luz y la transferencia de pantalla completa.

Detección de planos

Android XR: Plano de RA

N/A

Esta función proporciona compatibilidad para detectar y hacer un seguimiento de las superficies planas en el entorno físico.

Seguimiento de objetos

N/A

Android XR (extensiones): Seguimiento de objetos

Esta función proporciona compatibilidad para detectar y hacer un seguimiento de los objetos en el entorno físico, que se usa en combinación con una biblioteca de objetos de referencia.

Seguimiento facial

Android XR: Rostro de RA

  • Solo XR_ANDROID_eye_tracking
  • No hay seguimiento facial

Android XR: Seguimiento facial

  • XR_ANDROID_face_tracking

La compatibilidad con los ojos de los avatares se proporciona a través de la función Android XR: AR Face. Accede a las expresiones faciales de un usuario a través de la función de seguimiento facial de Android XR. Estas dos funciones se pueden usar juntas.

Ray casts

Android XR: Raycast de RA

  • Anclaje de plano
  • Ancla de profundidad

N/A

Esta función te permite proyectar un rayo y calcular la intersección entre ese rayo y los elementos rastreables de plano o de profundidad que se detectan en el entorno físico.

Anclas

Android XR: Ancla de RA

N/A

AR Anchor admite anclas espaciales, de plano y persistentes a través de AR Foundation.

Oclusión

Android XR: Oclusión de RA

  • Profundidad del entorno

N/A

La oclusión permite que el contenido de realidad mixta de tu app aparezca oculto o parcialmente oculto detrás de objetos del entorno físico.

Métricas de rendimiento

Métricas de rendimiento de Android XR

N/A

Usa esta función para acceder a las métricas de rendimiento de los dispositivos Android XR.

Capas de composición

Compatibilidad con capas de composición (se requieren el complemento de OpenXR y la capa de composición de RE)

Android XR: Capa de composición de transferencia

  • XR_ANDROID_composition_layer_passthrough_mesh

Usa la compatibilidad con capas de composición de Unity para crear capas de composición básicas (p.ej., cuadrilátero, cilindro, proyección). Android XR: Se puede usar Passthrough Composition Layer para crear una capa de transferencia con una malla personalizada, que lee desde el GameObject de Unity.

Renderización foveada

Renderización foveada (se requiere el complemento de OpenXR)

  • Admite el renderizado foveado con seguimiento de ojos: el área de mayor resolución se centra en el lugar donde mira el usuario, lo que hace que sea menos evidente para él.

Foveación (heredada)

La renderización foveada permite acelerar la renderización, ya que disminuye la resolución de las áreas en la visión periférica del usuario. La función de renderizado foveado de Unity solo es compatible con las apps que usan URP y Vulkan. La función de foveación (heredada) de las extensiones de Android XR para Unity también admite la canalización de renderización integrada y OpenGL ES. Te recomendamos que uses la función de renderización foveada de Unity siempre que sea posible, y ten en cuenta que se recomiendan tanto URP como Vulkan cuando se compila para Android XR.

Espacio de referencia sin límites

N/A

Android XR: Espacio de referencia sin límites

Esta función establece el modo de origen de seguimiento de XRInputSubsystem en Unbounded. Unbounded indica que el XRInputSubsystem hace un seguimiento de todos los InputDevices en relación con un ancla del mundo, que puede cambiar.

Modo de combinación del entorno

N/A

Modo de combinación de entorno

Esta función te permite configurar el modo de combinación del entorno de RE, que controla cómo se combinan las imágenes virtuales con el entorno del mundo real cuando se habilita la transferencia.

Geospatial (VPS)

N/A

Android XR: Geospatial

Permite que XRGeospatialManager acceda a las funciones del sistema de posicionamiento visual (VPS), verifique la disponibilidad de la ubicación, calcule las poses geoespaciales y configure el seguimiento de planos para las anclas de superficie y geoespaciales.

Autenticación de Google Cloud

N/A

Android XR: Google Cloud

Proporciona estrategias de configuración de autenticación de sesiones (clave de API, sin clave y token de autenticación) para servicios respaldados por la nube.

Multimodal Face

N/A

Android XR (extensiones): Rostro multimodal

Extiende ARFace de Unity con modalidades de seguimiento facial multimodales y configurables (XRFaceTrackerMode).

Pantalla de estado de la batería

N/A

Pantalla de estado de la batería

Permite consultar el estado de la batería y el nivel de carga durante el tiempo de ejecución de los controles conectados y las rutas de entrada con XRBatteryStateDisplayFeature.

Atenuación de transferencia global

Android XR: Cámara de RA

N/A

Permite consultar y establecer niveles de atenuación de la transferencia del mundo real con ARCameraFeature de Unity.

Enumeración de propiedades del sistema

N/A

Android XR: Propiedades del sistema

Enumera las propiedades de extensión del entorno de ejecución y las capacidades del dispositivo con XR_ANDROID_enumerate_system_extension_properties.

Configuración recomendada

N/A

Android XR: Configuración recomendada

Permite consultar los estados previos al inicio del entorno de ejecución (incluidos el modo de fusión del entorno, la opacidad de la transferencia y las modalidades de entrada activas) con XRRecommendedSettingsFeature.TryGetRecommendedSettings.

Detección de cuadros delimitadores

Android XR: Cuadro delimitador de RA

Entidades espaciales (extensiones): cuadro delimitador

Proporciona compatibilidad con la detección de cuadros delimitadores para objetos 3D en el entorno físico con el framework de entidades espaciales de OpenXR (SpatialBoundingBoxSubsystem).

Anclajes que se pueden compartir

N/A

Entidades espaciales (extensiones): Anclajes que se pueden compartir

Extiende las capacidades de las anclas con ARShareableAnchorManager y XRShareableAnchorSubsystem, lo que incluye adjuntar anclas geoespaciales (TryAttachGeospatialAnchor) y anclas de superficie (TryAttachSurfaceAnchorAsync) cuando se usan con Android XR: Geospatial.

Contenedor espacial

N/A

Contenedor espacial

Permite que el contenido de la aplicación se renderice dentro de un contenedor volumétrico 3D administrado por el sistema en el modo de espacio completo, con APIs y eventos de devolución de llamada en XRSpatialContainerFeature para consultar y solicitar el estado, los límites y la visibilidad del contenedor.

Entrada e interacción

Android XR admite la entrada natural multimodal.

Además del seguimiento de manos y ojos, también se admiten periféricos, como controles de 6DoF, mouse y teclado físico. Esto significa que se espera que las apps para Android XR admitan la interacción con las manos y no se puede suponer que todos los dispositivos incluirán controles.

Perfiles de interacción

Unity usa el perfil de interacción para administrar cómo se comunica tu aplicación de RE con varios dispositivos y plataformas de RE. Estos perfiles establecen las entradas y salidas esperadas para diferentes configuraciones de hardware, lo que promueve la compatibilidad y la funcionalidad coherente en una variedad de plataformas. Si habilitas los perfiles de interacción, puedes asegurarte de que tu aplicación de RE funcione correctamente con diferentes dispositivos, mantenga una asignación de entrada coherente y tenga acceso a funciones de RE específicas. Para establecer un perfil de interacción, haz lo siguiente:

  1. Abre la ventana Configuración del proyecto (menú: Edit > Configuración del proyecto).
  2. Haz clic en XR Plug-in Management para expandir la sección de complementos (si es necesario).
  3. Selecciona OpenXR en la lista de complementos de RE.
  4. En la sección Interaction Profiles, selecciona el botón + para agregar un perfil.
  5. Selecciona el perfil que deseas agregar de la lista.

Interacción con las manos

El complemento de OpenXR proporciona la interacción con las manos (XR_EXT_hand_interaction), y puedes exponer el diseño del dispositivo <HandInteraction> en el sistema de entrada de Unity habilitando el perfil de interacción con las manos. Usa este perfil de interacción para la entrada de mano compatible con las cuatro poses de acción definidas por OpenXR: "pellizcar", "tocar", "apuntar" y "agarrar". Si necesitas funciones adicionales de interacción o monitoreo de manos, consulta XR Hands en esta página.

Interacción con la mirada

El complemento de OpenXR proporciona la interacción con la mirada (XR_EXT_eye_gaze_interaction), y puedes usar este diseño para recuperar los datos de la postura de los ojos (posición y rotación) que devuelve la extensión. Obtén más información sobre la interacción con la mirada en la guía de entrada de OpenXR.

Interacción con el control

Android XR admite el perfil de control Oculus Touch para controles de 6DoF. El complemento de OpenXR proporciona ambos perfiles.

Interacción con el mouse

Las extensiones de Android XR para Unity proporcionan el perfil de interacción con el mouse de Android XR (XR_ANDROID_mouse_interaction). Expone un diseño de dispositivo <AndroidXRMouse> en el sistema de entrada de Unity.

Interacción con la postura de la palma

El complemento de OpenXR proporciona compatibilidad con la interacción de pose de la palma (XR_EXT_palm_pose), que expone el diseño de <PalmPose> dentro del sistema de entrada de Unity. La pose de la palma no pretende ser una alternativa a las extensiones o los paquetes que realizan el monitoreo de manos para casos de uso más complejos. En cambio, se puede usar para colocar contenido visual específico de la app, como imágenes de avatar. La pose de la palma consiste en la posición y la orientación de la palma.

Manos de RE

El paquete XR Hands te permite acceder a los datos de monitoreo de manos con XR_EXT_hand_tracking y XR_FB_hand_tracking_aim, y proporciona un wrapper para convertir los datos de las articulaciones de las manos del monitoreo de manos en poses de entrada. Para usar las funciones que proporciona el paquete de XR Hands, habilita las funciones Hand Tracking Subsystem y Meta Hand Tracking Aim OpenXR.

Ejemplo en el que se muestra cómo habilitar el monitoreo de manos El paquete XR hands puede ser útil si necesitas datos más detallados sobre la postura o las articulaciones de la mano, o cuando necesitas trabajar con gestos personalizados.

Para obtener más detalles, consulta la documentación de Unity para configurar XR Hands en tu proyecto.

Regiones de confianza del seguimiento facial

La extensión XR_ANDROID_face_tracking proporciona valores de confianza para tres regiones faciales: la parte superior izquierda, la parte superior derecha y la parte inferior del rostro. Estos valores, que van de 0 (sin confianza) a 1 (confianza máxima), indican la exactitud del seguimiento facial para cada región.

Puedes usar estos valores de confianza para inhabilitar progresivamente las formas de mezcla o aplicar filtros visuales (como el desenfoque) a la región facial correspondiente. Para una expresión básica, desactiva las formas de combinación en la región de la cara correspondiente.

El área de la "parte inferior del rostro" representa todo lo que está debajo de los ojos, incluidas la boca, la barbilla, la mejilla y la nariz. Las dos regiones superiores incluyen los ojos y el área de las cejas en los lados izquierdo y derecho del rostro.

En el siguiente fragmento de código de C#, se muestra cómo acceder a los datos de confianza y usarlos en una secuencia de comandos de Unity:

using UnityEngine;
using Google.XR.Extensions;

public class FaceTrackingConfidence : MonoBehaviour
{
    void Update()
    {
      if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.HasValue)
      {
        DebugTextTopCenter.text = "XrInstance hasn't been initialized.";
        return;
      }
      else if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.Value)
      {
        DebugTextTopCenter.text = "XR_ANDROID_face_tracking is not enabled.";
        return;
      }

      for (int x = 0; x < _faceManager.Face.ConfidenceRegions.Length; x++)
      {
        switch (x)
        {
          case (int)XRFaceConfidenceRegion.Lower:
            regionText = "Bottom";
            break;
          case (int)XRFaceConfidenceRegion.LeftUpper:
            regionText = DebugTextConfidenceLeft;
            break;
          case (int)XRFaceConfidenceRegion.RightUpper:
            regionText = DebugTextConfidenceRight;
            break;
        }
    }
}

Para obtener más información, consulta la documentación de las extensiones de Android XR para Unity.

Elige una forma de renderizar las manos

Android XR admite dos formas de renderizar las manos: una malla de mano y un visualizador prefabricado.

Malla de mano

El paquete de Unity para Android XR contiene una función de malla de mano que proporciona acceso a XR_ANDROID_hand_mesh extension. La función de malla de mano proporciona mallas para las manos del usuario. La malla de la mano contiene vértices de triángulos que representan la geometría de una mano. Esta función está diseñada para proporcionar una malla personalizada que represente la geometría real de las manos del usuario para su visualización.

Prefabricado de XR Hands

El paquete XR Hands contiene una muestra llamada Hands visualizer, que incluye manos izquierda y derecha completamente articuladas para renderizar una representación de las manos del usuario adecuada para el contexto.

Gestos del sistema

Android XR incluye un gesto del sistema para abrir un menú que permite a los usuarios volver atrás, abrir el selector o ver un resumen de las apps en ejecución. El usuario puede activar este menú del sistema pellizcando con la mano dominante.

Cuando el usuario interactúe con el menú de navegación del sistema, la aplicación solo responderá a los eventos de monitoreo de cabeza. El paquete XR Hands puede detectar cuando un usuario realiza acciones específicas, como interactuar con este menú de navegación del sistema. Verificar AimFlags, SystemGesture y DominantHand te permite saber cuándo se realiza esta acción del sistema. Para obtener más información sobre AimFlags, consulta la documentación de Enum MetaAimFlags de Unity.

XR Interaction Toolkit

El paquete XR Interaction Toolkit es un sistema de interacción de alto nivel basado en componentes para crear experiencias de RV y RA. Proporciona un framework que hace que las interacciones de IU y 3D estén disponibles desde los eventos de entrada de Unity. Admite tareas de interacción, como la respuesta táctil, la respuesta visual y la locomoción.


OpenXR™ y el logotipo de OpenXR son marcas comerciales de The Khronos Group Inc. y están registradas como marcas comerciales en China, la Unión Europea, Japón y el Reino Unido.