Aplicación de navegación interior en realidad mixta para Meta Quest 3, parte del sistema NavSpace: guía al usuario hasta un destino dentro de un edificio real dibujando una línea de navegación sobre el espacio físico.
Proyecto de título de Eduardo Apata y Fabián Orellana, guiado por el profesor Raúl Herrera Acuña, para el edificio DICI de la Universidad de Tarapacá, Arica.
NavSpace se compone de dos repositorios:
- Este repositorio (Unity): la app que corre en el visor. Calibra el espacio con anclas espaciales, descarga el espacio desde la API, construye el grafo de navegación, calcula rutas con A* y dibuja la guía hasta el destino.
- Panel de administración (repo Laravel aparte): el backend y CMS donde se registran los edificios, nodos y destinos, y que expone la API REST que esta app consume.
- Configuración de la API — al iniciar, el usuario elige el modo (realidad mixta o virtual) e ingresa la URL de la API (recordando las anteriores).
- Selección del espacio — la app pide
GET /api/buildingsy muestra un selector con los espacios disponibles. - Carga del espacio — con
GET /api/buildings/{id}descarga el modelo.glb, los nodos y los destinos, y arma el grafo A* (Point Graph). - Calibración (solo realidad mixta) — alinea el modelo del edificio con el espacio real usando el nodo inicial como punto de anclaje.
- Navegación — el usuario elige un destino y la app traza la ruta con una línea que lo guía piso a piso.
- Información del destino — al llegar, muestra el detalle desde
GET /api/destinations/{id}: horario académico (imagen) o de atención (texto + responsable).
- Unity + Meta XR SDK (anclas espaciales, passthrough).
- A Pathfinding Project* (grafo de navegación en tiempo de ejecución).
- glTFast (carga del modelo
.glbdescargado desde la API). - ProBuilder (modelado del edificio de referencia).
El ejecutable compilado (.apk) para instalar la app en el Meta Quest 3 está
disponible en la carpeta de la actividad de titulación en el Drive del grupo,
junto al resto de los entregables. Se instala en el visor por sideloading (por
ejemplo con SideQuest o adb install navspace.apk), ya que no está publicado en
la tienda de Meta.
- Unity 6000.4.3f1, versión utilizada actualmente por el proyecto.
- Git LFS, necesario para descargar correctamente los modelos, imágenes y otros recursos de gran tamaño.
- Meta Quest 3, para utilizar la navegación en realidad mixta, passthrough y calibración mediante anclas espaciales.
- Una instancia disponible de NavSpace Panel, con la API REST y los datos de edificios, nodos y destinos registrados.
- Conexión de red entre el dispositivo donde se ejecuta la aplicación y el servidor donde está disponible la API.
Assets/Scripts/
Core/ Integración con la API, carga del .glb y pathfinding
ApiService, ApiModels, GlbLoader, SpaceService, PathfindingConfigurator
Navigation/ Rutas y nodos (NavigationController, NavDestination, NavNode)
UI/ Paneles: selección de espacio, información, horario, ajustes
Debug/ Herramientas de diagnóstico y medición de rendimiento
Assets/Scenes/SampleScene.unity Escena principal
Assets/Prefabs/ Prefabs de tarjetas y filas de horario
-
Clonar el repositorio:
git clone <URL_DEL_REPOSITORIO> cd NavSpace
-
Instalar Git LFS y descargar los recursos administrados con esta herramienta:
git lfs install git lfs pull
-
Abrir la carpeta del repositorio desde Unity Hub utilizando Unity 6000.4.3f1.
-
Esperar a que Unity importe los recursos y restaure los paquetes definidos en
Packages/manifest.json. -
Abrir la escena principal:
Assets/Scenes/SampleScene.unity -
Iniciar el panel de administración y comprobar que su API sea accesible desde el dispositivo donde se ejecutará NavSpace.
Al iniciar la aplicación, el usuario selecciona el modo de navegación e ingresa la dirección del servidor de NavSpace Panel. La dirección puede escribirse con o sin protocolo:
navspace-panel.test
https://navspace-panel.test
192.168.1.5:8000
http://192.168.1.5:8000
Antes de registrar una versión estable se recomienda comprobar:
- conexión con una dirección válida de NavSpace Panel;
- rechazo de direcciones vacías, inválidas o de servidores incompatibles;
- visualización de los edificios disponibles;
- descarga correcta del modelo, nodos y destinos;
- presentación de estados vacíos cuando no existen categorías o destinos.
- generación de la ruta hacia el destino seleccionado;
- actualización de la guía durante el desplazamiento;
- detección de llegada al destino;
- presentación de la información y horario correspondiente;
- conservación del color, grosor y velocidad configurados.
- calibración mediante el nodo inicial;
- alineación del modelo con el entorno físico;
- estabilidad de las indicaciones durante el recorrido;
- llegada correcta al destino seleccionado.
- imagen de edificio no disponible;
- modelo que no puede descargarse;
- pérdida temporal de conexión durante una solicitud;
- edificio sin información suficiente para iniciar la navegación.
- Para pruebas fuera de la red local se puede exponer el panel mediante un túnel y utilizar la URL pública generada.
- El proyecto permite tráfico HTTP durante el desarrollo para conectarse a servidores disponibles dentro de la red local.
- Three.js utiliza un sistema de coordenadas derecho y Unity uno izquierdo, por lo que la aplicación corrige el signo del eje X del modelo, los nodos y los destinos.