Unity VR Mirror Networking Test Result
A downloadable game
1. Introducción
El objetivo principal del proyecto fue desarrollar una experiencia de realidad virtual multijugador con alta calidad gráfica y un rendimiento óptimo en dispositivos XR (Meta/Pico). Para ello se utilizaron diversas herramientas y tecnologías como Unity 6, Universal Render Pipeline (URP), XR Interaction Toolkit, Mirror Networking, Addressables y GPU Instancing. Además, se implementaron prácticas de desarrollo modular, pruebas unitarias y documentación del código para facilitar el mantenimiento y la escalabilidad del sistema.
2. Decisiones Arquitectónicas y Técnicas
2.1. Uso de Unity y Configuración de URP
Se inició el proyecto en Unity 6 configurando URP para aprovechar mejoras gráficas y optimizaciones específicas para entornos XR. Esto permitió ajustar parámetros como render scale, sombras y efectos post-procesamiento, logrando un equilibrio entre calidad visual y rendimiento.
2.2. Integración de XR Interaction Toolkit y XR Plugin Management
Se integraron XR Interaction Toolkit y XR Plugin Management para asegurar la compatibilidad con dispositivos Meta y Pico, garantizando que los controles y la interacción en entornos VR sean fluidos y adaptados a cada dispositivo.
2.3. Networking con Mirror
Se eligió Mirror Networking para gestionar la comunicación en red y la sincronización de jugadores y objetos. Se desarrollaron scripts dedicados como VRNetworkManager, VRNetworkPlayerScript y AutoLAN que permiten la detección automática de servidores, la asignación de autoridad en red y la sincronización en tiempo real de posiciones, rotaciones y gestos de los jugadores.
2.4. Carga Dinámica de Assets y Optimización de Draw Calls
Para mejorar la eficiencia gráfica se implementó el sistema Addressables para la carga asíncrona de assets y se aprovechó GPU Instancing para renderizar múltiples instancias de un mismo objeto en una única llamada, lo que redujo significativamente el número de draw calls.
2.5. Organización y Modularidad del Código
Se refactorizó y estructuró el código aplicando buenas prácticas de modularidad y documentación:
- Regiones (#region): Se organizaron variables, métodos de inicialización, lógica de interacción, comandos de red, etc.
- Comentarios XML: Cada método y propiedad cuenta con documentación técnica.
- Patrones de diseño: Separación clara entre scripts de UI, interacción, networking y físicas.
3. Optimización de Rendimiento
3.1. Configuración del URP
Se optimizó el URP ajustando el render scale y reduciendo la resolución de sombras y efectos post-procesamiento, lo que minimizó las caídas de FPS en dispositivos XR.
3.2. Uso de GPU Instancing y Addressables
La combinación de GPU Instancing y Addressables permitió una carga fluida de assets y redujo la cantidad de draw calls, optimizando el rendimiento gráfico del proyecto.
3.3. Sincronización en Red y Asignación de Autoridad
La utilización de Mirror Networking y la correcta gestión de comandos y RPCs aseguraron que las acciones de los jugadores (por ejemplo, recoger y soltar objetos) se sincronizaran de forma eficiente entre todos los clientes.
4. Mecánica Creativa: Búsqueda y Colección de Esferas
(Tarea 5.1)
Descripción de la Mecánica
Se desarrolló una mecánica innovadora en la que los jugadores deben explorar el mapa en búsqueda de esferas repartidas por diferentes áreas. Cada esfera, con comportamiento físico realista (gravedad, colisiones y respuesta a fuerzas), debe ser recogida y depositada en una pared designada para ser "coleccionada". Para activar la colección masiva y desbloquear nuevas áreas o recompensas, todas las esferas deben colocarse en la pared simultáneamente.
Aspectos Técnicos y Sincronización en Red
- Integración Física: Se utilizan Rigidbody y Colliders para garantizar interacciones naturales.
- Sincronización Multijugador: Se usan comandos al servidor y RPCs para propagar el estado de cada esfera en tiempo real.
- Interfaz y Feedback: Una UI muestra el progreso de esferas recolectadas. La información se sincroniza usando SyncVars y hooks.
- Integración en el Flujo del Juego: La mecánica se integra sin interrumpir la jugabilidad y promueve la cooperación entre jugadores.
Beneficios y Criterios de Aceptación
- Funcionalidad: Permite a los jugadores interactuar y colaborar activamente.
- Interactividad: Física realista y sincronización de red garantizan inmersión.
- Integración General: Compatible con el flujo natural del juego sin interrupciones.
5. Conclusiones
La implementación de esta experiencia de realidad virtual multijugador se apoyó en decisiones arquitectónicas sólidas, la integración de tecnologías modernas y la adopción de buenas prácticas de desarrollo. Las optimizaciones en el renderizado, la carga dinámica de assets y la sincronización en red contribuyeron a una experiencia fluida y estable en dispositivos XR.
Además, la inclusión de una mecánica creativa, como la búsqueda y colección de esferas, no solo enriquece la jugabilidad, sino que también fomenta la colaboración entre jugadores, demostrando la capacidad del sistema para integrar de manera efectiva elementos innovadores en el flujo del juego.
Este documento técnico proporciona una visión integral del proceso de desarrollo y sirve como base para futuras mejoras y mantenimiento, asegurando que todos los aspectos críticos del proyecto hayan sido considerados y optimizados.
Published | 22 days ago |
Status | Released |
Author | Elián Medina |
Tags | mirrornetworking, oculus, Unity, Virtual Reality (VR) |
Leave a comment
Log in with itch.io to leave a comment.