What is the SteamVR Unity plugin?

SteamVR y Unity XR: Guía de Integración y Solución

20/03/2011

Valoración: 4.46 (895 votos)

El desarrollo de experiencias de realidad virtual multiplataforma presenta desafíos únicos, especialmente al intentar que diferentes sistemas de hardware y software funcionen en armonía. Uno de los pilares en el desarrollo de VR para PC es SteamVR, la plataforma de Valve que da soporte a una amplia gama de visores. Integrarlo en Unity, uno de los motores de juego más populares, es fundamental para muchos desarrolladores. Sin embargo, con las actualizaciones recientes de Unity y la introducción del XR Interaction Toolkit, han surgido problemas de compatibilidad que pueden detener un proyecto por completo. Este artículo no solo te guiará en la integración básica de SteamVR, sino que también te ofrecerá soluciones detalladas y probadas para superar los conflictos con el sistema de XR de Unity.

Is SteamVR compatible with unity XR interaction toolkit?
It is a short guide to implement some sort of compatibility between the SteamVR Unity plugin and the Unity XR Interaction Toolkit, that under the new XR Plugin Management in Unity are not working very well together. I was working on a consultancy project with Unity, that had to be cross-platform.
Índice de Contenido

¿Qué es el Plugin de SteamVR para Unity?

El plugin de SteamVR para Unity es un conjunto de herramientas y librerías esenciales que actúan como un puente entre el motor de Unity y el ecosistema de SteamVR. Su función principal es permitir que las aplicaciones creadas en Unity se comuniquen de manera efectiva con cualquier hardware de VR compatible con SteamVR, como el HTC Vive, Valve Index, Oculus Rift (a través de SteamVR), y muchos otros. Este plugin proporciona elementos preconfigurados, como el rig de cámara de VR, sistemas de seguimiento de mandos y un sistema de entrada robusto que permite mapear acciones a los botones y gestos de diferentes controladores, facilitando enormemente el desarrollo de interacciones inmersivas.

Integración Básica de SteamVR en un Proyecto de Unity

Antes de abordar los problemas complejos, es crucial entender el proceso de integración estándar. Si estás comenzando o simplemente necesitas un repaso, aquí tienes los pasos fundamentales para configurar SteamVR en tu proyecto de Unity.

  1. Instalar el Plugin de SteamVR: Abre la Unity Asset Store desde el editor, busca 'SteamVR' y procede a descargar e importar el plugin en tu proyecto. Este paquete contiene todos los assets y scripts necesarios para comenzar.
  2. Configurar los Ajustes de XR: Navega a Edit > Project Settings > XR Plug-in Management. En esta ventana, asegúrate de activar el proveedor 'OpenVR Loader'. Esto permite que tu aplicación se comunique con el hardware de VR a través de SteamVR.
  3. Configurar el Entorno de VR: Arrastra el prefabricado (prefab) de la cámara de SteamVR a tu escena. Este rig de cámara, usualmente llamado [CameraRig] o similar, se encarga de gestionar la posición de la vista del jugador y el seguimiento de los mandos en el mundo virtual. Colócalo en el punto de inicio deseado para el jugador.
  4. Implementar el Sistema de Entrada de VR: SteamVR utiliza un sistema de entrada basado en acciones que es muy potente. Para configurarlo, ve a Window > SteamVR Input. Aquí puedes definir acciones como 'Agarrar', 'Teletransportar' o 'Disparar' y luego vincularlas a los botones físicos de los mandos. Una vez definidas, haz clic en 'Save and Generate' para crear las clases y bindings necesarios.
  5. Optimizar la Experiencia: El rendimiento es clave en la realidad virtual para evitar el mareo. Asegúrate de aplicar técnicas de optimización como el 'occlusion culling', ajustar los niveles de detalle (LOD) de tus modelos y comprimir texturas. Utiliza la herramienta 'SteamVR Performance Test' para identificar cuellos de botella.
  6. Probar e Iterar: Realiza pruebas constantes con diferentes configuraciones de hardware y en distintos escenarios de tu juego para monitorizar el rendimiento y la experiencia de usuario. La comunidad de Unity y SteamVR es un gran recurso para solucionar problemas comunes.

El Gran Desafío: Incompatibilidad con el XR Interaction Toolkit

Aquí es donde las cosas se complican. Unity ha estado impulsando su propio ecosistema de desarrollo de XR con herramientas como el XR Plug-in Management y el XR Interaction Toolkit. El objetivo es ofrecer una forma estandarizada y multiplataforma de crear interacciones de VR (agarrar, teletransportarse, apuntar, etc.).

How do I use SteamVR in Unity XR?
Open the Unity Asset Store and search for ‘SteamVR’. Download and import the SteamVR plugin into your Unity project. This plugin provides the necessary libraries and assets for SteamVR integration. 2. Configure VR Settings Go to ‘Edit’ > ‘Project Settings’ > ‘XR Plug-in Management.’ Enable ‘OpenVR.’

El problema surge de una desconexión, en parte "política", entre Valve y Unity. Cuando Unity modernizó su sistema de gestión de plugins de XR, Valve optó por desarrollar su propio plugin internamente en lugar de permitir que Unity lo gestionara. Esto provocó un retraso en el soporte y, lo más importante, una falta de integración profunda con las nuevas herramientas de Unity. El resultado es que, al usar el XR Interaction Toolkit junto con el plugin de OpenVR de Valve bajo el nuevo sistema, es muy común que el input de los mandos no se detecte en absoluto. Los interactores y los objetos interactuables simplemente no funcionan, dejando al jugador con una experiencia de VR completamente pasiva y aburrida.

Esta situación ha dejado a muchos desarrolladores en un aprieto: han construido toda su lógica de interacción sobre el XR Interaction Toolkit para ser multiplataforma, solo para descubrir que no es compatible con SteamVR. Rehacer todo el proyecto o mantener una rama separada solo para SteamVR es una pesadilla de mantenimiento.

Soluciones al Problema de Compatibilidad

Afortunadamente, la comunidad de desarrolladores ha encontrado soluciones para sortear este obstáculo. A continuación, se presentan dos métodos efectivos, cada uno adecuado para diferentes versiones y necesidades del proyecto.

Tabla Comparativa de Soluciones

CriterioSolución 1: Sistema VR HeredadoSolución 2: Hack de Integración
Versión de UnityRecomendado para Unity 2019 y anteriores.Necesario para Unity 2020 y versiones posteriores.
VentajasSencillo de implementar, estable y oficialmente usado en los ejemplos del Toolkit.Compatible con las últimas versiones de Unity, preparado para el futuro.
DesventajasUtiliza un sistema obsoleto que ha sido eliminado en Unity 2020.Complejo de configurar, requiere modificar código del Toolkit, es un "hack".

Solución 1: Utilizar el Sistema VR Heredado (Legacy)

Si tu proyecto está en una versión de Unity anterior a la 2020 y no te importa usar un sistema de gestión de plugins obsoleto, esta es la solución más sencilla y directa. El antiguo sistema se integra mejor con la forma en que el XR Interaction Toolkit fue diseñado originalmente.

What is the SteamVR Unity plugin?
The SteamVR Unity Plugin is an API that manages three main things for developers: loading 3D models for VR controllers, handling input from those controllers, and estimating what your hand looks like while using those controllers. This allows developers to target one API that all popular PC VR headsets can connect to.
  1. Desinstala o desactiva el paquete 'XR Plug-in Management'.
  2. Ve a Project Settings > Player.
  3. En la pestaña 'XR Settings' (que podría estar bajo 'Other Settings'), marca la casilla 'Virtual Reality Supported'.
  4. En la lista de 'Virtual Reality SDKs' que aparece, añade 'OpenVR'.

Con estos simples pasos, el XR Interaction Toolkit debería funcionar correctamente con SteamVR, detectando todas las entradas de los mandos sin problemas.

Solución 2: El Hack para el XR Plug-in Management Moderno

Si estás obligado a usar Unity 2020 o una versión más reciente, la opción anterior no está disponible. Esta solución es un hack más técnico pero funcional que implica modificar el código del XR Interaction Toolkit para que pueda leer las entradas del sistema de SteamVR. A continuación, se detalla el proceso paso a paso.

  1. Crea tu proyecto: Comienza con un proyecto de Unity (se recomienda Unity 2019.4 LTS o superior).
  2. Instala XR Plug-in Management: Ve a Project Settings > XR Plug-in Management y haz clic en 'Install'.
  3. Instala el XR Interaction Toolkit: Abre el Package Manager (Window > Package Manager). Asegúrate de que los 'preview packages' estén visibles en las opciones avanzadas y busca e instala el 'XR Interaction Toolkit'. Unity podría pedirte reiniciar para habilitar el nuevo 'Input System'; acepta y, tras reiniciar, ve a Project Settings > Player > Other Settings y establece 'Active Input Handling' en 'Both'.
  4. Instala el OpenVR XR Plugin: El plugin de Valve no viene con Unity. Debes descargarlo desde su repositorio de GitHub. Busca la última versión del 'unity-xr-plugin' de Valve. Será un archivo .tgz. En el Package Manager de Unity, haz clic en el símbolo '+' y selecciona 'Add package from tarball...', luego elige el archivo que descargaste.
  5. Habilita OpenVR Loader: Vuelve a XR Plug-in Management en los Project Settings y marca la casilla 'OpenVR Loader' para activar el soporte de SteamVR.
  6. Instala el plugin de SteamVR (Legacy): Sí, necesitas ambos. Descarga el plugin de SteamVR 'clásico' desde su repositorio de GitHub (no desde la Asset Store) e impórtalo en tu proyecto. Si aparece una ventana emergente sobre 'Built in vr detected', simplemente acéptala. Verifica que en XR Settings la opción 'Virtual Reality Supported' siga desactivada.
  7. Genera las Acciones de SteamVR: Ve a Window > SteamVR Input. Acepta la ventana emergente y haz clic en 'Save and Generate' para crear los archivos de acción de entrada.
  8. Libera el XR Interaction Toolkit: Debemos modificar el código del toolkit, así que no puede permanecer como un paquete de solo lectura. Con el explorador de archivos, ve a la carpeta de caché de tu proyecto (/Library/PackageCache), busca la carpeta del toolkit (ej. com.unity.xr.interaction.toolkit@...), cópiala a una ubicación temporal. Luego, en el Package Manager, desinstala el XR Interaction Toolkit. Finalmente, copia la carpeta que guardaste dentro de la carpeta Assets de tu proyecto.
  9. Añade la Dependencia de SteamVR: Localiza el archivo Assets/[nombre_carpeta_toolkit]/Runtime/Unity.XR.Interaction.asmdef. En el Inspector, en la sección 'Assembly Definition References', añade dos nuevas referencias: una a SteamVR.asmdef y otra a SteamVR_Actions.asmdef.
  10. ¡A modificar el código!: Este es el núcleo del hack. Necesitamos crear una clase 'wrapper' y modificar algunos archivos del toolkit para que la usen. El objetivo es que, cuando se detecte OpenVR, el toolkit lea las entradas desde SteamVR en lugar del sistema de entrada de Unity. Deberás modificar archivos como XRController.cs y InputHelpers.cs para que utilicen una nueva clase que crearás llamada InputDeviceWrapper.cs. Esta clase actuará como intermediaria: si no es SteamVR, pasará las llamadas al sistema de Unity; si es SteamVR, las traducirá usando las funciones de SteamVR_Input.
  11. Configura la Escena: Para que SteamVR comience a detectar entradas, necesita objetos en la escena. Crea dos GameObjects vacíos y añade a cada uno el script SteamVR_Behaviour_Pose. En el Inspector, asigna a uno el 'Input Source' como 'Left Hand' y al otro como 'Right Hand'.

Aunque es un proceso complejo, este método te permite utilizar las últimas herramientas de Unity con el soporte robusto de SteamVR, creando una solución preparada para el futuro hasta que Valve y Unity ofrezcan una integración oficial y nativa, probablemente a través de OpenXR.

Preguntas Frecuentes (FAQ)

¿Por qué mi XR Interaction Toolkit no recibe input de los mandos de SteamVR?
Esto se debe a una incompatibilidad entre el nuevo sistema XR Plug-in Management de Unity y el plugin OpenVR de Valve. El sistema de entrada del Toolkit no se comunica correctamente con el sistema de entrada de SteamVR. Las soluciones de este artículo abordan este problema específico.
¿Es OpenXR la solución definitiva a este problema?
Sí, a largo plazo, OpenXR es el estándar diseñado para unificar el desarrollo de XR y eliminar este tipo de problemas de compatibilidad. Cuando tanto Unity como Valve finalicen sus implementaciones de OpenXR, este estándar será la forma recomendada de usar el XR Interaction Toolkit con SteamVR, haciendo obsoletos los hacks actuales.
¿Qué pasa si Unity y Valve solucionan esto? ¿Mi proyecto se romperá?
Si seguiste el 'Hack de Integración' (Solución 2), revertir los cambios es relativamente sencillo. La clase InputDeviceWrapper fue diseñada para tener los mismos métodos que la clase original de Unity. Podrías eliminar los archivos del hack, eliminar la carpeta de SteamVR y reinstalar el XR Interaction Toolkit desde el Package Manager, y tu código debería seguir funcionando con mínimas modificaciones.

Si quieres conocer otros artículos parecidos a SteamVR y Unity XR: Guía de Integración y Solución puedes visitar la categoría Juegos.

Subir