# Tecnologías multimedia e interacción/Curso 2015-2016: Caso 7

Invizicars: Nuestro proyecto ha consistido en la creación de un videojuego de realidad aumentada compatible con teléfonos con sistema operativo Android. Para jugar hace falta enfocar un circuito que la aplicación reconozca. Este circuito puede estar impreso o proyectado en una pantalla. El juego mostrará un coche virtual que recorrerá el circuito y una serie de obstáculos, también virtuales, con los que el coche colisionará y que el jugador deberá eliminar pulsando sobre ellos en la pantalla para llegar al final del circuito y ganar la partida.

## Objetivos del proyecto

Nuestro principal objetivo durante el proceso de desarrollo de la aplicación era desarrollar un videojuego con tecnologías de realidad aumentada. Necesitábamos desarrollar un proyecto que cumpliese los requisitos de la asignatura Tecnologías Multimedia e Interacción, de forma que la aplicación que teníamos que desarrollar debía ser interactiva y que incluyese elementos multimedia. Teniendo eso en cuenta, pensamos que la realización de una aplicación de realidad aumentada cumpliría con todos esos requisitos, especialmente si se trataba de un videojuego.
A partir de ese objetivo principal, los objetivos que nos propusimos durante el diseño y la implementación de la aplicación fueron los siguientes:
* Crear objetos virtuales a partir del dibujo de un circuito. Este objetivo era fundamental para la creación de Invizicars, ya que el reconocimiento de un marcador (en nuestro caso de un circuito) y la posterior inclusión de elementos virtuales sobre la realidad, son la base de la tecnología de la realidad aumentada.
* Conseguir dinamismo e interacción para que el juego resulte divertido.
* Crear un juego de suficiente jugabilidad y atractivo al usuario para conseguir que el juego no sea muy fácil para el jugador, pero que tampoco sea tan difícil como para que se aburra de la aplicación.

## Proceso de desarrollo
### ¿Cómo empezar?

Una vez que teníamos decidido que nuestro proyecto se basaría en realidad aumentada y que consistiría en el desarrollo de un videojuegos para dispositivos móviles Android debíamos empezar a pensar en los siguientes puntos:
* Qué entorno de programación y qué librería de realidad aumentada usaríamos en nuestro proyecto.
* Qué marcador usaríamos como base del reconocimiento de la aplicación.
* Qué objetos virtuales crearíamos sobre el marcador y qué tipo de interacción tendrían entre ellos y con el propio jugador.
* Qué bibliotecas de recursos virtuales podríamos usar para incluir esa interacción.
Sabiendo esto, comenzamos el desarrollo en sí del videojuego, que se dividió en las etapas que se enumeran a continuación.

### Etapas de desarrollo del proyecto

* Investigación de las librerías de realidad aumentada disponibles.
* Toma de contacto con la librería de realidad aumentada elegida para el desarrollo del proyecto: Vuforia.
* Generación del primer prototipo y creación del marcador de la aplicación.
* Iteraciones en el desarrollo del proyecto: generación de versiones.
* Generación de la versión final.

## Librerías utilizadas
### Vuforia

Vuforia es un SDK para desarrollar aplicaciones móviles Android que permite integrarse en Unity para generar aplicaciones de realidad aumentada. Las principales funcionalidades que proporciona son:
* Establecimiento de cuál va a ser el tipo de marcador a utilizar, es decir, del objeto a reconocer: código QR, imagen, cilindro, cono, objeto compuesto... En el caso del desarrollo de Invizicars, el objeto a reconocer será una imagen de un circuito, como ya se ha comentado.
* Tracking: reconocimiento de ese objeto para hacer posible el posicionamiento de los objetos virtuales en referencia al marcador.
* Visionado del contenido digital.
Además, Vuforia proporciona una plataforma de creación de marcadores: Target Manager de Vuforia. Esta plataforma permite crear el marcador a utilizar en una aplicación de realidad aumentada, y saber si ese marcador va a poder ser reconocido por la cámara del dispositivo. En general, los marcadores deben tener alto contraste y líneas muy definidas y detalladas. Una vez que se ha creado el marcador, el Target Manager permite exportarlo como una librería de Unity, la cual se va a poder importar a nuestro proyecto.

### iTween

Usando esta librería se pueden crear splines mediante curvas de bezier para que los objetos los recorran.
Para la creación de un trazado con iTween se puede utilizar el editor visual de Unity, donde se arrastran manualmente los puntos que describen las curvas bezier que conforman la línea, o se pueden proporcionar coordenadas para una serie de puntos, de forma que un circuito se pueda reproducir una vez trazado.
Una vez que se tiene un circuito por el que el coche puede moverse, se debe programar un pequeño script que describa su movimiento. El script debe utilizar lenguaje C#, habitual en Unity. En nuestro caso, el script indica lo siguiente:
* El coche debe tomar como referencia el circuito trazado
* Debe recorrerlo a una velocidad no demasiado elevada, para que sea posible para el jugador completar el juego
* Se hace que el suavizado de movimiento sea lineal, para que lo haga siempre a la misma velocidad
* Se indica que una vez terminado vuelva a empezar. Esto es porque el juego está pensado para un recorrido multivuelta.
* Se hace que el coche se oriente según las curvas del circuito.
* Se le indica la distancia hasta la que puede prever las curvas del circuito para establecer su orientación.

## Herramientas y tecnologías
### Herramientas

* Entorno de desarrollo: Unity Personal Edition 5.3.5
* Edición de imágenes: Adobe Photoshop CS6
* Edición colaborativa de documentación: Google Docs
* Control de versiones: Google Drive
* Gestión del proyecto: Trello

### Lenguajes

* C#

### Tecnologías

* Teléfono móvil para hacer pruebas: Doogee Valencia DG800 con Android 4.4 KitKat
* Base de datos remota (trabajo futuro): Para almacenar puntuaciones de los usuarios.

## Implementación

La implementación se ha realizado a través del entorno de desarrollo de videojuegos Unity junto con la librería de realidad aumentada Vuforia. Por lo tanto, la arquitectura de la aplicación será la de una aplicación típica de un videojuego desarrollado a través de Unity: basado en escenas y scripts.

### Escenas de Invizicars

* Menú principal: es la escena que se visualiza al arrancar la aplicación. En ella se ve simplemente el logo de la aplicación y un botón para iniciar el juego. Por falta de tiempo, no ha sido posible mejorar esta interfaz, por lo que se deja como trabajo futuro.
* Juego: escena principal, ya que contiene toda la mecánica del juego y la funcionalidad de realidad aumentada: la cámara de realidad aumentada que proporciona Vuforia, así como todos los elementos virtuales del juego y el marcador a reconocer. El jugador accede a esta escena desde el menú principal.

### Scripts de Invizicars

* MenuPrincipal: este script genera la interfaz de usuario del menú principal, y permite al jugador llegar a la escena del juego.
* EnfoqueMarcador: este script genera un mensaje en la pantalla del dispositivo que indica al jugador que tiene que enfocar el marcador para empezar a jugar.
* Desaparecer: script que detecta un toque sobre un objeto (uno de los obstáculos del circuito) y lo elimina del juego. Es el script que permite al usuario ir borrando obstáculos del camino del coche hacia el final del circuito.
* Chocar: script que detecta que el collider del coche (jugador) colisiona con el collider de un obstáculo. Cuando detecta esta colisión, elimina el coche y ejecuta el script PerderJuego.
* PerderJuego: script que muestra la interfaz gráfica informando al usuario de que ha perdido y mostrando un botón, que al pulsarlo, reinicia la partida.

## Trabajo futuro

El trabajo futuro de la aplicación consiste en solucionar bugs encontrados durante el desarrollo de la aplicación, realizar mejoras con respecto a la versión actual (especialmente en la interfaz del menú principal) e implementar ideas que no hemos podido llevar a cabo por falta de tiempo. Algunas de estas ideas son las siguientes:
* Incluir animaciones en los obstáculos del circuito.
* Menú de selección de coche.
* Reconocimiento de múltiples circuitos.
* Reconocimiento automático de circuitos.
* Generación automática de obstáculos.
* Puntuaciones y rankings.
* Integración con redes sociales.

## Conclusiones

Tras la realización del proyecto, podemos concluir que la realidad aumentada es una tecnología en auge, que se puede utilizar en múltiples ámbitos. En este caso, hemos podido conocer lo potente que puede llegar a ser la realidad aumentada en el campo del ocio, en concreto en el de los videojuegos. También, podemos concluir que la realidad aumentada puede ser el futuro de las interfaces gráficas gracias a su adaptabilidad al entorno real.
En cuanto a las conclusiones del proyecto, podemos decir que estamos satisfechos con el resultado obtenido, ya que la aplicación cumple las características de un videojuego de realidad aumentada y gracias a la realización del mismo hemos podido trabajar con una tecnología en auge. A pesar del resultado satisfactorio, hay muchas ideas que se han quedado por implementar, por falta de tiempo, que son las que ya se han comentado en Trabajo futuro.