
Instalación de Unity
Esta guía es un apoyo complementario al material del curso DESARROLLO DE VIDEOJUEGOS Y REALIDAD VIRTUAL CON UNITY 3D. Su creación es por parte del tutor y su uso es exclusivo por parte del alumnado de dicho curso.
Para empezar con nuestro proyecto de VR en Unity deberemos realizar los siguientes pasos para disponer de Unity 6 (versiones 6.0 y posteriores) instalado en nuestro equipo. Si ya lo tienes configurado puedes pasar al apartado de crear el proyecto directamente.

Creamos una cuenta en Unity.com, dentro de la misma pulsamos sobre Descargar Unity Hub para Windows. Una vez instalado el UnityHubSetup.exe, tras abrirlo en el apartado de Installs escogemos tras presionar Install Editor Unity 6 LTS (Long Term Support). Marcar Visual Studio y Android para incorporar a la instalación.


Empezamos un proyecto llamado VR con Universal 3D que contiene el Universal Render Pipeline como forma de renderizado.


Configuración de Meta Horizon Link
Mientras se crea el proyecto, veremos lo que necesitamos para conectar Oculus con Unity. Se llama Meta Quest Link (ahora Meta Horizon Link).

Dicho programa nos permite vincular las gafas Meta Quest u Oculus (antes la empresa se llamaba Oculus VR antes de que Facebook lo comprará y tras su rebranding como Meta pasaron a llamarse las gafas Meta Quest)

Podemos loguearnos usando una cuenta de Facebook (es lo que meta de ser la dueña de Facebook, Instagram y Whatsapp) en tus cascos Oculus y simplemente conectarlos al ordenador.




– Al abrir el proyecto veremos en Hierarchy y scene todo ya: main camera, directional light
– Creamos un plano en la escena

– Renombramos la escena

– Al seleccionar en el inspector el plano veremos : posición, incluso añadir scripts.

XR Settings
Lo usaremos en nuestro proyecto para ayudar a la comunicación VR de los cascos con nuestro proyecto de Unity.
Edit> Project>Settings -> Habrá un apartado llamado XR Plugin Management.

Nos pedirá instalar XR Plugin Management a nuestro proyecto.

– AL terminar se muestran varias opciones: Oculus, Open XR y Unity Mock HMD (Emulador)
– Oculus y sus controles
– Open XR: sirve para múltiples cascos HTC, Oculus 2.
– Unity Mock para controlar VR project sin cascos.

En nuestro caso instalaremos Open XR
Con esto podemos usar Oculus X y web based platform.
Los diferentes issues se pueden reparar presionando Fix All

El primer bloque habla de profile o perfil. AL pulsar en Edit > OpenXR > Enabled Interaction Profiles
Pulsamos en el + de la derecha. Y verás controles. Por ahora usaremos los Oculus Touch Controller Profile.
Si pulsamos ahora en el icono de android en vez del monitor.
Veréis que hace lo mismo, añadir un perfil con controles de Oculus. Ahora sí vamos a Project Validation. Si veis varias issues pulsamos Fix It. Una vez hecho esto XR Plugin Management está instalado. ¡Podemos volver al proyecto!
Ahora vamos a Windows > Package Manager -> Unity Registry (lupa)
y buscamos XR y aparecerá XR Plugin Management y otro llamado XR Interaction Toolkit que debemos instalar. Si quieres usar las manos, tienes XR Hands.
Una vez instalado XR Interaction Tool veréis distintas opciones.
– Nos vamos a samples y tendréis distintos ejemplos que se pueden importar [Starter Assets]. Nos ahorrará bastante trabajo y será más sencillo hacer juegos. Una vez instalado pulsamos a arreglar todos los problemas.
– También nos tocará importar [XR Device Simulator] con esto ya está todo completo y podemos comenzar.
– Podéis explorar las carpetas. Si entramos en Assets > Samples> XR Interactive Toolkit> Starter Assets > “Demo” lo podemos ejecutar.
– En la jerarquía/hierarchy podéis ver todo lo que trae: grab, teletransporte, climb…
El tema es que usaremos nuestro propio nivel. Volvemos al plano de antes. Para crear nuestro lawn
– En el proyecto vemos el Main Camera, pero ahora necesitamos el virtual camera.
sí que o borramos, vamos a los samples, ejemplos otra vez de XR Interaction> Start Assets>Prefabs
– Nos va a pedir XR como origen which consist? del controlador de la cámara. Lo arrastramos XR Origin Si abrimos el X Origin (XR Rig) tenemos ajustes o se puede crear un método personalizado.
Para desplegarlo tenemos varias características.
Se podría hacer desde cero todo esto, metiendo el código y tendría otros scripts. Pero no haremos esto. le dejaremos ese trabajo a Unity.
Creamos un GameObject vacío. Y lo llamamos XR Interaction Manager.
Añadimos dentro el componente -> XR Interaction Manager (muy original sí 😉 )
También en Hierarchy> botón derecho XR > UI Event System o UI Canvas
En este caso escogeremos UI Event System
También en el menú conceptual veréis que existe algo que hemos creado antes > XR > XR Origin (VR) difiere pues dentro tendrá un camera offset y un main camera pero no tendrá un controller que tocará crearlo desde cero.
Frente al otro XR Origin (XR Rig) que hemos hecho antes cogiendo de los prefabs del Starter Assets de XR Interaction Toolkit.
Por tanto nos quedaremos con este XR Origin original (el XR Rig que arrastramos) y no creamos lo último que hemos dicho. Solo esta parte es informativa y para que comprendas el trabajo que nos ahorramos.
El hierarchy hasta este momento se debería ver así:
Introducimos un cubo y creamos un material que aplicamos. Si hacemos una carpeta para mantener el orden mejor.
Podemos rotar el XR Origin (XR Rig) para que la cámara apunte al cubo directamente.
¡Y probar las gafas VR! (Si las tenemos claro)
Si ejecutamos el juego veremos la cámara pero no podremos interactuar (esto lo resolveremos con la opción Unity Mock HDM que recordemos que permitía simular unas VR.
Resumen de XR Settings
- XR Origin: el cuerpo en el mundo que ves y la cámara con los ojos y las manos que controlas.
- XR Interaction Manager: te ayuda a interactuar para tocar o saber que cosas habitan como el cubo, poder agarrar objetos o teletransportarse.
- Event System (UI): es como el sistema UI de las VR. Qué hay que hacer al hacer click en un botón, interacciones con dichos botones, etc.
Teletransporte (TELEPORTATION)
Para añadir teletransporte hemos de ir a Hierarchy, botón derecho XR Teleportation Anchor y Teleportation Area.
– Teleportation area: te teletransporta a cualquier superficie
– Teleportation anchor: es una zona ajustada como por ejemplo cerca de un cubo y no quieres moverte a otros sitios.
Creamos un teleportation Area, creamos un material azul. Y veréis que el teleportation area trae ya un plano (área) que se puede escalar y aplicar el azul de material. Podemos reducir a la mitad su tamaño 0,5 en X,Y,Z. Y solo podremos teletransportarnos por esa zona acotada (por ejemplo al lado izquierdo del escenario, lejos del cubo)
Si probamos las gafas veremos que aún pulsando los botones, todavía no nos podemos teletransportar. Tenemos que hacer otra cosa más en Unity. Nos vamos a Inspector de Teleport Area, habrá un código y donde dice Teleportation Area script hay una opción llamada Interaction Layer Mask [Teleport] debe estar marcado siempre Teleport. Y otra opción llamada Match Orientation > World Space Up. Probamos las gafas de nuevo y ya funciona el teletransporte.
Ahora ampliaremos el plano del escenario para hacerlo más grande.
Vamos a probar con el otro teletransporte, Teleportation Anchor. Aparecerá un cubo transparente con un plano. Podemos escalar dicho plano a 0,25 por ejemplo. Y también aplicarle el material azul. También podemos rotarlo 90 grados pues el eje Z indicará hacia dónde miramos cuando nos teletransportamos., en este caso queremos que mire al cubo central del escenario.
En Anchor Teleport tenemos otro script que podemos revisar si la opción Interaction Layer Mask está en [Teleport]. También la opción de Teletransportation Configuration donde dice Match Orientation [World Space Up] lo cambiamos a [Target up and forward] Así mirará forward al axis.
El anchor teleportation nos permite hacer una pequeña area si no queremos que la gente se mueva por toda la escena. Si quieres que lo primero que vea sea lo que tu decidas. Además podemos duplicarlos.
Crear Anchor Teleport desde cero
Otra opción es crear desde cero este Anchor Teleport con un cubo y lo escalamos como si fuera una baldosa.
Y podemos añadir un componente llamado Teleportation anchor (aparecerá un cubo azul transparente) y será nuestro propio teleportation anchor.
Nuestro cubo ya traía un box collider. Es mejor que el plano, al tener el box collider ayuda mejor con las colisiones. La diferencia con el Teleportation Anchor es que tiene el mesh collider que cubre toda la malla, es más detallado, para modelos complejos como un coche 3D. Mientras que el Box collider estará dentro del coche (usa menos recursos)
Revisemos que el Teleportation Anchor > Interaction Layer Mask [Teleport] está marcado. Acordamos que el eje Z es donde miramos y lo dirigimos hacia el cubo central. Y revisamos que Teleportation Configuration está marcado en [To target and forward] A la hora de teletransportarnos, saldrá una flecha en esa dirección. A nadie le gustaría teletransportarse y no saber a donde mirar después y puede marear eso.
Resumen de Teletransporte
Teleportation Area: te permite moverte libremente dentro de la realidad virtual. Además contiene el Mesh Collider (es más complejo). En el apartado script Teleportation Area en el apartado Interaction Layer Mask [Teleport] para que tenga prioridad.
Teleportation Anchor: no te mueves libremente pero ayuda a posicionar al usuario con la orientación a la que quieres ver. Las opciones de Interaction Layer igual que [Target up and Forward] y al hacer click que la Z mire hacia donde quieres.
Agarrar objetos (GRAB)
Para agarrar cosas en Unity crearemos una mesa. Lo podemos escalar y rotar (poner archivo llamado Real-LIFE sCALE IN UNITY) 1,2 x 0,75 Deberíamos hacer las cosas en escala para VR. El transform está en metros. Le podemos aplicar otro material como el verde a la mesa.
Y añadiremos objetos como un cilindro y lo ponemos encima de la mesa.
También crearemos un martillo o hammer mediante un empty object. Dentro crearemos un cubo que estiraremos y un cilindro. Podemos añadirle un material metalizado al martillo.
Cilindro: le añadimos de componente uno llamado XR Grab Interaction. Añadirá un rigidbody.
El rigidbody es una cosa que hará que ese objeto sea físico. Si lo ponemos en una bola podrías jugar al baloncesto y que se caiga la pelota al lanzarla. Sin rigidbody el objeto flotaría para siempre y con el rigidbody se crearán las propiedades físicas que trae y se pueden modificar.
En el Rigidbody hay una opción llamada Collision Detection que dice [Discrete] lo cambiamos a [Continuous Dynamic] funcionará mucho mejor por ejemplo al rodar una bola o temas más precisos. Es lento pero trabaja mejor. Cuando sucedan fallos al atravesar paredes u otros objetos, la opción Collision Detection será tu aliada. Es útil que esté como Continuos Dynamic en VR.
Volvemos al script llamado XR Grab Interactive. Tenemos una opción llamada Movement Type [Instantaneous]
si lo cambiamos por [Velocity Tracking] es mejor y más natural. Puede que el otro sea rápido pero es antinatural. Aunque para aprender podemos dejarlo como está. Pero ahí tenéis esa opción importante.
Seguimos en XR Grab tenemos las opciones Smooth Position y Rotation Position, las activamos si no lo están y les ponemos a ambos los valores 5 y 0,5 (5 smooth position, 0,5 tighten position)
Otra opción importante es Far Attach Mode. Que en su desplegable diga Near o Far. (Cerca o lejos). Si queremos que al agarrar el objeto lo tengamos delante de nuestros ojos será la opción Near. Y far si queremos controlarlo a lo lejos. Por ahora lo dejamos por defecto como Defer to Interactor
Volvemos al martillo que hicimos. Si le añadimos un XR Grab Interactable. Solo que en este caso solo queremos que se coja el martillo por el mango. Así que dentro de Hammer tendremos que hacer otro empty object llamado Attachpoint.
Es como el punto de agarre que tendremos que mover a la mitad del mango (es transparente) Y si volvemos al XR Grab Interactive que metimos a Hammer. Cambiamos la opción llamada Movement Type [Instantaneous] por [Velocity Tracking].
Activamos el Smooth Position Rotation. Le ponemos 8, 0,5 y 1 a ambas opciones. En Collision Detection [Continuous Dynamic] y abajo hay una opción llamada Attach Transform, le añadimos el AttachPoint que creamos antes ¡y lo jugamos!
Podéis como paso extra cambiar la opción de For Attach Mode a Near y veréis que ahora podréis contemplar el martillo de cerca.

