← Índice
← Unity
Finalizar →
Instalación
- Crear proyecto Universal Render Pipeline 3D.
- Cambiar a plataforma Android en File / Build Profiles.
- Instalar Unity OpenXR Meta desde Window / Package Manager (se instalan varios paquetes automáticamente, incluyendo XR Plugin Management y AR Foundation).
- Instalar XR Interaction Toolkit.
- Instalar Starter Assets.
- Opcionalmente, instalar también XR Device Simulator.
Configuración
- En Edit / Project Settings / XR Plugin Management:
- Activar OpenXR en Android, para compilar en las Quest.
- Activar XR Simulation en PC, para ver el simulador de XR.
- En Edit / Project Settings / XR Plugin Management / OpenXR:
- Añadir Oculus Touch Controller Profile a los perfiles.
- Activar todos los Meta Quest Support. Entre ellos está Meta Quest: Camera (Passthrough), que permite ver la habitación real a través de las gafas.
- En Edit / Project Settings / XR Plugin Management / Project Validation, Fix All para quitar todos los warnings y errores.
- En Edit / Project Settings / Quality, buscar el Render Pipeline Asset para móvil (por ejemplo, Mobile_RPAsset). Abrirlo y deshabilitar HDR en Quality. De lo contrario, puede no salir la imagen de la cámara en las gafas.
- En Player Settings (Edit / Project Settings / Player):
- Cambiar el nombre de compañía y de aplicación por algo significativo.
- En Identification, cambiar el nombre del paquete por algo significativo:
com.nombre_alumn@.nombre_juego
- Para que la AR funcione correctamente en un proyecto URP: dentro de la ventana del proyecto, buscar los Renderers y añadirles a todos AR Background Renderer Feature.
Elementos AR generales
- En una escena URP, borrar todo excepto Directional Light.
- Añadir XR / AR Session a la escena (clic derecho en Hierarchy → XR / AR Session).
- Añadir el prefab XR Origin (XR Rig) a la escena, arrastrándolo desde la carpeta del proyecto Samples / XR Interaction Toolkit / [versión_instalada] / Starter Assets / Prefabs. Los scripts de AR irán dentro de este GameObject.
- En la cámara (XR Origin (XR Rig) / Camera Offset / Main Camera):
- En Environment, poner Background Type: Solid Color y bajar el alfa del color de fondo a 0. Si no, en las gafas se ve un fondo negro (o el cielo) en vez de la habitación.
- Añadir el componente AR Camera Manager (para que funcione el passthrough de las gafas).
- Añadir el componente AR Camera Background (para que funcione en el simulador).
Detección de planos
- En las Quest los planos no se detectan en directo: salen del escaneo de la habitación que se hace en las propias gafas (Configuración del espacio / Space Setup). Hay que hacerlo antes de probar la app, y la app necesita permiso para usar esos datos (ver «Permiso de escena», al final).
- Para utilizar los planos del entorno, añadir el componente AR Plane Manager al XR Origin (podemos personalizar el plano con un prefab).
- Para crear un prefab de plano, clic derecho sobre la ventana Hierarchy → XR / AR Default Plane. A ese plano, cambiarle el material (está dentro del componente Renderer) por el que queramos y convertirlo en prefab.
- Para anclar objetos en el mundo real o en planos detectados, añadir AR Anchor Manager al XR Origin. Después accedemos a él desde un script.
- Para crear un ancla en un objeto:
anchorObj.AddComponent<ARAnchor>();
- Para crearla en un plano:
arAnchorManager.AttachAnchor(plane, hitPose);
- Para hacer un raycast sobre los planos AR detectados, añadir AR Raycast Manager al XR Origin. Después accedemos a él desde un script.
- Para usarlo:
arRaycastManager.Raycast(position, hits, TrackableType.PlaneWithinPolygon);
- Utilizar los inputs de los controladores para colocar los objetos virtuales en el mundo real.
Permiso de escena
- Para colocar elementos en el entorno (planos, anclas, raycast…), la app necesita el permiso
com.oculus.permission.USE_SCENE, que da acceso a los datos de la habitación. Sin él, los managers de AR no hacen nada.
- En la escena, dejar desactivados AR Plane Manager y los demás managers que usen el entorno.
- Al arrancar la aplicación, pedir el permiso desde un script y, cuando el usuario lo conceda, activar los managers.
- Comprobar si ya está concedido:
Permission.HasUserAuthorizedPermission("com.oculus.permission.USE_SCENE")
- Si no, pedirlo:
Permission.RequestUserPermission("com.oculus.permission.USE_SCENE", callbacks); (con PermissionCallbacks para saber si se ha concedido o denegado).
- Ejemplo completo en la documentación de Unity OpenXR: Meta.