VR con Oculus Quest

Curso de Unity 3D

20.  
39.  

Podemos crear un nuevo proyecto de realidad virtual creando un proyecto 3D y añadiéndole las librerías necesarias o creando un proyecto a partir de una plantilla de VR. La segunda opción utiliza muchos módulos y librerías innecesarias, así que nos quedaremos con la primera opción.

Preparación del entorno

1. Windows → Package Manager → Unity Registry → Instalamos…

  • XR Plugin Management
  • XR Interaction Toolkit
    • Desplegamos el panel de esta package e instalamos Starter Assets.

2. Para poder probrar los juegos directamente desde las gafas sin tener que hacer un build e instalar la build manualmente, será necesario instalar este software:

https://www.oculus.com/setup/

Después, arrancaremos la aplicación → Vamos al menú dispositivos y terminamos de realizar la instalación.

3. Para poder hacer las build será necesario tener los módulos de compilación para Android instalados en nuestro editor:

Unity Hub → Installs → Seleccionamos los 3 puntitos de nuestra instalación → Add Modules → Marcamos la check de Android SDK y Open JDK

VR con Oculus Quest 1

4. Menu Edit → Project Settings → XR Plug-In Management →

  • En la pestaña de Desktop marcamos Oculus. De esta forma podremos lanzar nuestros juegos en las gafas sin necesidad de hacer una Build.
  • En la pestaña Android Marcamos Oculus. De esta forma podremos compilar una build.

5. Desbloquear el developer mode en las Quest:

  1. Antes de nada, tendremos que crear una organización en la página de Oculus.
  2. En la oculus App del móvil → settings
  3. Pulsamos en el icono de mis oculus quest para hacer el pairing.
  4. En el menú contextual pulsamos sobre → other settings → Developer mode → lo activamos

Añadir personaje

1. Añadir los controles de manos

1. En el panel de proyecto, nos vamos a Assets Samples XR Interaction Toolkits → version → Starter Assets

  • XR Default Left Controller → En el panel inspector pulsamos el botón de Add to ActionBasedController default.
  • XR Default Right Controller → En el panel inspector pulsamos el botón de Add to ActionBasedController default.

2. Posibilidad de mirar en en 360º

Menu GameObject XR XR ORigin Action based  . Para poner una cámara en el casco y un controlador de las manos. Tendremos tracking de cabeza y manos.

Al añadir este objeto, se añaden también, anidados los GameObjects LeftHandController y RightHandController. Debemos comprobar que ambos componentes tienen correctamente asignadas las propiedades Position Action, Rotation Action, Tracking State Action… en muchas ocasiones los controles del mando izquierdo son asignados al mando derecho. Para corregir esto, lo más fácil es eliminar el componente XR Controller (Action Based) y volver a añadirlo arrastrandolo y soltándolo desde el panel de proyecto (este componente esta ubicado en Assets/Samples/XR Interaction Toolkit/2.0.1/Starter Assets).

Al GameObject XR Origin debemos añadirle el componente Input Action Manager. A este componente debemos añadirle un elemento al listado de Action Assets, que será el XRI Default Input Actions.

3. Coger objetos

Al objeto que deseamos coger le añadimos el componente WR Grab Interactable. A continuación tienes algunas propiedades importantes de este componente:

Movement Type.

  • Instantaneous : Cuyando coges el objeto se convierte en hijo de tu mano, lo cual implica que como tu mano va a poder atravesar objetos, el objeto cogido también. Nadie te quitará el objeto de la mano, y este objeto al colisionar con el entorno lo tumbará todo.
  • Velocity tracking. El objeto cogido colisionará con los objetos que tengan un collider. Puede ser que el jugador en una colisión pierda el objeto  o este se deforme.
  • Kinematic. Es un punto intermedio entre los anteriores.

Track position. Si esta activado el objeto se moverá con tu mano cuando lo agarres.

Throw on Detach. Si lo desmarcamos en el caso de soltar el objeto, este caerá por gravedad hacia abajo. Si esta marcado, el objeto cogerá la velocidad de la mano en el momento de soltarlo.

Throw velocity scale. Incrementa la velocidad del objeto con respecto a tu mano en el momento de ser lanzado.

Attach transform. Permite cambiar la posición/orientación del objeto en el momento de cogerlo. Por ejemplo no podemos coger una espada de cualquier forma. Para usar esto, le ponemos un empty como hijo al objeto, y cambiamos su orientación z para que esta apunte en la dirección en la que queremos que apunte el objeto cuando lo cojamos.

Interactive Events. Podemos hacer que el objeto cambie de color, resalte, se anime etc, cuando lo cojemos, nos acercamos a él, etc.

Importamos el paquete de manos en nuestro proyecto de Unity arrastrando y soltando el fichero en nuestro panel de Proyecto. Dentro de los GameObjects RightHand Controller y LeftHand Controller, accedemos al componente XR Controller (Action Based) y en las propiedades Model Prefab, arrastramos Prefabs/Left o RightHand, según corresponda (debemos haber importado este paquete antes).

Dentro de este componente, marcamos la check de Animate Model. En la propiedad Model Select Transition escribimos Grab. Y en la propiedad Model Deselect Transition escribimos Release, que son los nombres de los parámetros del animator dentro de los modelos de las manos.

Coger objetos por cercanía

Para coger los objetos por cercanía en lugar de utilizando un rayo quitaremos los componentes:

  • XR Interactor
  • Line Renderer
  • XR Interactor Line Visual

De los GameObject LeftHand Controller y RightHandController y los cambiaremos por el componente XR Direct Interactor.

También añadiremos a cada uno de estos GameObject un SphereCollider y los pondremos a Trigger

Desplazar el personaje

Pulsamos con el botón derecho sobre el GameObject XR Origin XR Locomotion System (Action Based)

Teletransportación

A cualquier sitio al que querramos poder ir (en nuestro ejemplo el plano del suelo), debemos añadirle el GameObject Teletransportation Area.

Para especificar un punto concreto de teletransportación dentro de un area utilizaremos el componente Teleportation Anchor en lugar del Teletransportation Area.

Movimiento con el joystick

En el componente Snap Turn Provider del Game Object Locomotion System marcamos la check Use Reference de la propiedad Right Hand Snap Turn Action y le asignamos XRI RightHandLocomotion/Turn.

Añadimos el componente Continuous Move Provider (Action Based) al GameObject Locomotion System y en la propiedad Left Hand Move Action le asignamos el valor XRI LeftHand Locomotion/Move.

Con esta configuración el personaje se moverá en un plano sin colisionar con nada. Para que se produzcan estas colisiones añadiremos los componentes:

  • Character Controller
  • Character Controller Driver. Debemos asignar a la propiedad Locmotion Provider el valor Locomotion System. Dejaremos el min height a 1 y el max height a 2.

Encajar en objetos

Ejecutar en las Oculus

  1. File -> Build Settings
    1. Platform: Android → Switch Platform
    2. Player Settings
      • Other Settings → Minimum API Level → Seleccionamos la mínima versión del SDK (23 es la recomendada):
  2. Nescesitamos conectarlas con un cable que no sólo sirva para cargar, si que también permita la transferencia de datos.

3. En Run device, escogemos Oculus Quest.

VR con Oculus Quest 2
← Máscara en Unity 3D
Memory (juego de las parejas) →