El objetivo de esta sesión fue aprender a leer y
a usar los diferentes tipos de input que puede dar el oculus como el tracking
de la cabeza y los botones del control remoto. Para lograr el objetivo, desarrolle
parte de un demo en donde el jugador debe navegar por una escena de una ciudad
en ruinas, la perspectiva del jugador es de primera persona, la dirección en la
que se mueve está determinada por la posición de su cabeza y con el control
remoto acelera o cambia su velocidad.
Tracker de rotación de la cabeza
Para entender cómo se leen los inputs del
tracking, descargue el demo VR de "Flyer", en este demo se controla
la dirección de una nave con el movimiento de la cabeza. Esta nave siempre está
moviéndose hacia adelante.
Demo Flyer
Luego de un poco de búsqueda, encontré que en el
script FlyerMovementController se cambia la posición de la nave teniendo en
cuenta el movimiento de rotación de la cabeza del usuario.
Script del movimiento de la nave
Específicamente en el método MoveFlyer, en las
dos primeras líneas se obtiene un cuaternio que representa la rotación de la
cabeza, para acceder a este cuaternio se usa el método GetLocalRotation de la
clase VR.InputTracking, a este método se le debe pasar por parámetro el nodo VR
del cual se quiere obtener la información.
Código para leer el tracking
La clase VR.InputTracking ofrece los siguientes 3
métodos, el de interés es el método de GetLocalRotation como se mencionó anteriormente.
Documentación de la clase
El nodo VR mencionado es según la documentación,
uno de 6 posibles elementos que le pueden dar datos de entrada de tracking a
Unity, en este caso se quiere obtener el tracking de la cabeza.
Documentación de VRNode
Es interesante resaltar que gracias a las
interfaces que expone Unity, estos métodos para obtener información de tracking
no solo funcionan para el Oculus, sino que también funcionan para otros HDM
como el HTC Vive, esto elimina el problema de tener que hacer un código diferente
para cada tipo de dispositivo de entrada.
Input del control remoto
Leer este input no represento un mayor problema
gracias a la documentación oficial, para leer el input se usa la clase UnityEngine.Input,
si se desea verificar que el control remoto está bien configurado y listo para
ser usado se puede usar el método UnityEngine.Input.GetJoystickNames(), este método
retorna una lista de nombres que son los dispositivos de entrada que detecta
Unity, el control remoto aparece con el nombre “Oculus Remote”. Para escuchar
los eventos de los botones se usan los “mappings” descritos en la documentación.
Documentación de datos de entrada del control remoto
En caso de que no se disponga de un control
remoto, se pueden realizar pruebas usando un control de Xbox como análogo.
Proyecto de aplicación
Para iniciar, descargué un asset de la ciudad en ruinas de la tienda de Unity.
Escena del asset descargado
Esta escena serviría
como base para el demo de volar usando el tracking de la cabeza y el input del
control remoto.
La razón por la que
elegí esta escena es porque primero, la calidad y los efectos ambientales son
bastantes buenos, por lo que la experiencia en un dispositivo como el Oculus va
a ser mejor ya que gracias a su poder de procesamiento, todos estos detalles de
la escena se podrán captar mejor y en turno la inmersión del usuario aumentara,
la segunda razón por la que escogí esta escena, es porque fue diseñada para ser
experimentada en primera persona, la escena tiene un objeto que representa el
jugador, sobre este objeto se aplicara lo aprendido de como leer los inputs de
tracking de rotación de la cabeza y del control remoto del oculus.
Se identificaron
los dos scripts que son necesarios modificar para cambiar la rotación del jugador
con el mouse a la rotación con el oculus y el movimiento hacia delante con el
teclado al movimiento con el control remoto.
Scripts del objeto jugador
En la siguiente sesión
hare las modificaciones necesarias y añadiré más datos de salida al oculus basándome
en otros demos oficiales de Unity.








No comments:
Post a Comment