Tuesday, February 28, 2017

Desarrollo juego

Luego de una experiencia no muy placentera con el demo anterior de la ciudad en ruinas (Altos niveles de mareo), planteé un nuevo objetivo, luego de ver el tipo de experiencias que puede ofrecer Unity, decidí crear un juego en base a algunas lecciones aprendidas.

El juego


El juego que voy a crear consiste en que el jugador está inmovilizado al lado de un castillo en ruinas, afortunadamente cuenta con su visor de rayos de calor para defenderse de hordas de monstruos que vienen a atacarlo. Las mecánicas son muy básicas, el jugador solo puede mover la cabeza, para eliminar a un monstruo el jugador debe quedarse mirándolo por un determinado tiempo (De 1 a 4 segundos), si algún monstruo llega al jugador se pierde el juego, para ganar, el jugador debe eliminar a todos los monstruos que vengan camino a él.

Para los elementos gráficos del juego voy a usar los siguientes assets:

Asset de los monstruos

Asset del cementerio

Para iniciar, cargue la escena del ambiente de cementerio de uno de los assets, luego de esto ubico al jugador en la posición en donde tendrá que defenderse de los diferentes monstruos.

Escena y jugador


Lo siguiente que hice fue crear el objeto jugador junto con su componente cámara, este objeto jugador será el que tendrá el script para leer la posición del oculus y mover la cámara de acorde a esto ya que desde la posición frontal se dispararan los “rayos caloríficos” para eliminar a los monstruos.

Para que el juego sea más inversivo y agradable, también añadí animaciones a los monstruos para que proporcionen un feedback adecuado cuando el jugador les esté haciendo daño o cuando los monstruos estén atacando al jugador, para hacer esto emplee el animator controller de Unity, con este se pueden definir transiciones entre animaciones y luego más adelante usar algún trigger para iniciar esas transiciones.

Animator controller


Para que los monstruos siguieran al jugador, cree un script que se le debe agregar a cada objeto monstruo, de esta manera logro crear una IA muy básica que me servirá para los propósitos del juego.

Script de los monstruos


Siguientes pasos


Los siguientes pasos para completar el juego son:
-         Crear fuentes de sonidos 3D para mejorar la experiencia y hacer uso de una de las opciones más interesantes del oculus.
-         Manejo de puntos de vida del jugador.
-         Mecánicas de puntos y de tiempo para hacer el juego más competitivo.
-         Crear diferentes niveles de dificultad
-         Asignar propiedades únicas a cada uno de los monstruos.


Estado actual desarrollo

Tuesday, February 21, 2017

Leyendo los datos de entrada del Oculus

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.

Wednesday, February 15, 2017

Tutorial Unity

En esta sesión, decidí que quería usar el motor de Unity para construir mis futuras experiencias de realidad virtual. Por este motivo para iniciar, realice el tutorial oficial para hacer mi primera aplicación VR.

Desarrollo del juego demo


El paso inicial del tutorial era el de crear un proyecto nuevo en Unity, hasta este punto aun no había que hacer algún paso especial relacionado con la realidad virtual.
Creación del proyecto.

En los primeros pasos se crearon los objetos 3D que compondrían la experiencia, en este caso, una esfera que representa al jugador, un plano el cual es el área de juego, y unos "pickups" que son los items que se deben recolectar para ganar.

Creación de objetos 3D que componen el juego.

Personalización de los objetos con shaders.

Primera prueba de como se vería el juego cuando se ejecutara.

"Pickups" azules que se deben recolectar para ganar el juego.


Se hicieron también varios scripts que manejaban el comportamiento del jugador (Esfera), es decir que acciones tomar cuando se recibía algún input del usuario, en este caso el input eran las flechas del teclado. Otro aspecto que se controlaba con el scripting era como se hacia la recolección de los "Pickups" y la muestra de un texto que indicaba cuanto le faltaba al jugador para ganar.

Prueba del juego ya con los scripts implementados.

Cuando ya se tenia todo listo, se proseguía a realizar el build del juego en donde se elige una plataforma para la cual se hará el build y luego se crea el ejecutable del juego.

Ejecutable creado del juego

Como un todo, el proceso de desarrollo en Unity me parecio bastante sencillo y las herramientas que ofrece son bastante intuitivas, ademas de que ofrece gran flexibilidad en como hacer las cosas, con este tutorial puedo ver el gran potencial que tiene Unity para permitir crear una aplicación VR unica.

Conversión a VR

En la siguiente parte del tutorial se mencionaban los pasos necesarios para que el juego se pudiera jugar en VR. El primero era habilitar el soporte para VR en la configuración del proyecto, el segundo paso era uno muy importante ya que para evitar que los usuarios se marearan, se cambio la forma en que esta dispuesta la cámara, en la aplicación VR la cámara sigue al jugador (Esfera) y se restringe el movimiento de la esfera para que esta no pueda rotar en ninguno de los ejes, si no se hiciera esto el juego produciría mucho mareo para los usuarios.

Luego de estos cambios finalmente se pudo ejecutar la aplicaci´n en VR y tener una experiencia medianamente agradable, medianamente porque aun se sentia extraño seguir a la esfera mientras esta recogía los "pickups".


Siguientes pasos

Ya conociendo de lo que es capaz Unity, voy a plantear un prototipo de una experiencia en VR para implementarla y probarla en las próximas sesiones que trabaje con el Oculus Rift


Thursday, February 2, 2017

Setup

En la primera sesión con el oculus rift hice todo lo correspondiente con la instalación y configuración inicial del oculus.


El proceso inicio ingresando al enlace https://www3.oculus.com/en-us/setup/ en donde descargue un instalador que se tomó alrededor de cuarenta minutos descargando e instalando archivos necesarios para el uso del oculus rift con el computador.

Luego de esto segui varios pasos necesarios para calibrar y configurar la distancia y pocisión en donde usaria el oculus, esto tomo varios intentos debido a que no estaba posicionando correctamente el sensor que apunta a la cara.

Cuando finalicé la calibración del oculus, tuve acceso a unos demos bastante interesantes que demostraban lo que era capaz de hacer el oculus.






¡En la siguiente sesión comenzara el trabajo de verdad!