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

Título: Unreal Engine 4: Descubriendo el Motor de Videojuegos

## Descripción del Proyecto y Objetivos

En una primera aproximación al alcance del proyecto lo que se pretende es experimentar con el motor de videojuegos Unreal Engine 4. Concretamente se pretende estudiar el entorno y la física del mismo siendo capaces al final de poder explicar al resto de compañeros el funcionamiento básico del mismo.
Uno de los aspectos que se pretende mostrar es la facilidad de usar un motor de videojuegos como es Unreal Engine para programadores amateurs e inexpertos en la programación de videojuegos. Una aproximación más ambiciosa y a la que a lo mejor se puede llevar es la inclusión del motor en un posible ámbito educativo para poder entender de manera visual distintos conceptos explicados en física.
El proyecto lo hemos desarrollado con la versión 4.9 de Unreal Engine 4. Pese a que existen versiones más actuales, parte del contenido gráfico se ha reutilizado de proyectos liberados por Epic algunos de los cuales únicamente funcionan para la mencionada versión del motor de videojuegos. Hemos decidido centrarnos en la parte funcional del motor y no en la parte de diseño del mismo, para la cual Unreal Engine también proporciona editores. Además, en caso de que no se quieran utilizar estos editores gráficos existen otros como por ejemplo Blender, Maya o 3DsMax. Se pueden desarrollar y modelar los diseños utilizando estas herramientas y, posteriormente, importarlas a Unreal Engine.
Los objetivos que podemos destacar de este proyecto es la posibilidad de investigar de un motor de videojuegos como Unreal ya que ninguno de nosotros había trabajado con él con anterioridad. De esta forma nos permitirá conocer el potencial que presenta así como la oportunidad de trabajar con determinados aspectos de la asignatura como audio o animación además de con los blueprints.

## Contenido del Proyecto

En el juego se muestran dos niveles. En el primero de ellos el jugador aparece en un escenario de piedra con una puerta a su espalda. Esta puerta no se abrirá hasta que el jugador no consiga una llave. Una vez abierta permitirá cargar el siguiente nivel. El jugador posee una barra de vida sobre su cabeza así como 3 vidas en la esquina superior izquierda. Así mismo la vida se irá recargando cada cierto tiempo. En el mapa se pueden observar distintas trampas y plataformas las cuales puede herir al jugador así como diferentes puntos de checkpoint que permitan continuar la partida desde el determinado punto en caso de morir. Además podemos recuperar alguna vida en caso de que muramos consiguiendo el widget del corazón presente en el mapa. Además en el escenario se puede ver un enemigo con su propia inteligencia artificial que se encuentra patrullando por una zona del nivel y en caso de que invadamos su zona comenzará a seguirnos. Esto irá acompañado de daño por parte del enemigo hasta que no salgamos de su zona de influencia o le matemos. Para ello debemos equipar la espada que tiene el jugador y poder observar la animación del mismo mediante la tecla 1. Con ella seremos capaces de matar al enemigo. Una vez el enemigo haya muerto se puede observar como aparece una llave dorada en el nivel, la cual debemos coger y dirigirnos hacia la puerta. En este caso si seremos capaces de cargar el siguiente nivel.
Todo lo explicado anteriormente va acompañado de audio mejorando la experiencia del usuario. Existen sonidos ambientales, ruidos al pisar o al saltar o ruidos asociados a determinados elementos como por ejemplo el asociado a las estalactitas cuando caen al suelo.

## ¿Qué es Unreal Engine?

Unreal Engine es un motor de videojuegos de ordenador y consolas creado por la compañía Epic Games. Es la base de multitud de videojuegos conocidos en primera persona como por ejemplo Unreal Tournament, Gears of War, Star Wars Republic Commando, o Batman: Arkham Asylum. También se ha utilizado en otros géneros como el rol y juegos de perspectiva en tercera persona. La versión actual está programada en C++ y es compatible tanto con OpenGL como DirectX 11 y 12, siendo compatible con varias plataformas como PC (Microsoft Windows, GNU/Linux), Apple Macintosh (Mac OS X) y la mayoría de consolas (Xbox One y PlayStation 4). Unreal Engine también ofrece varias herramientas de ayuda para diseñadores y artistas facilitando la visualización de entornos o de construcciones. Esto lo convierte en un entorno atractivo, competitivo dentro de su campo y muy completo.

## Tipos de Proyectos de Unreal

Unreal ha ido evolucionando con los años desde su fundación en 1998. La primera versión del motor únicamente soportaba juegos en primera persona. Con el paso de los años el motor ha ido evolucionando y modernizándose permitiendo hoy en día crear distintos tipos de proyectos entre los que se pueden destacar proyectos en primera persona, en tercera persona tanto en 3D como en 2D, side scroller, de vehículo, de vehículo avanzado, de puzzle, o de naves entre otros. Al crear un nuevo proyecto también permite utilizar contenido inicial ya existente en el propio motor de videojuegos o no.

## Entorno de Trabajo

Unreal proporciona distintos entornos de trabajo en función de lo que se esté realizando. En la Figura1 se puede ver la pantalla principal y en la que se pueden distinguir distintas partes. La zona central se encuentra el visor de nuestro nivel, es decir, el mapa donde se va a jugar. En su parte inferior se encuentra el Content Browser, en el cual se puede navegar a través de la estructura de nuestro proyecto con el objetivo de buscar los distintos componentes y clases que lo forman y que nos permite organizarlo. Así mismo en la zona derecha se pueden ver dos subventanas. La ventana superior contiene todos los elementos existentes en nuestro nivel actual mientras que en la ventana inferior se pude observar las propiedades del elemento o actor seleccionado.

### BluePrints y Mecanismo de Colisiones

El mecanismo principal con el que funciona Unreal es a través de colisiones. La mayoría de objetos poseen una malla de colisión transparente a la hora de jugar que será la encargada de lanzar y disparar flujos de eventos en el momento que colisione con otra mallas de otros objetos. Los blueprints serán los que nos permitan llevar a cabo la programación de la lógica de cada uno de los actores existentes en el nivel.
Los BluePrints nos permiten programar de forma gráfica, visual y sin necesidad de tirar ninguna línea de código, toda la lógica de los actores del juego. Existen distintos tipos de BluePrints pero todos siguen una idea análoga: Definir en que momento se producira el disparo de una secuencia de eventos. Existen un conjunto de eventos que definen el proceso de lanzamiento entre los que podemos destacar al comenzar el juevo (EventBeginPlay), cuando se produzca una colisión o solapamiento con otro objeto (EventBeginOverlap) o cada cierto tiempo (EventTicks). Tras ellos se define la secuencia de eventos o instrucciones que queremos que se ejecuten cuando se produzca el evento o acción definidas como se puede observar en la Figura 3.

## Otros Usos de Unreal Engine

Pese a que Unreal Engine es un motor de videojuegos no solo es utilizado para el desarrollor de los mismos. Además de para la implementación de videojuegos y gracias al gran potencial que ofrece su avanzada tecnología es utilizado en otros ámbitos. Existen ejemplos como el del artista francés Koolo, el cual utiliza el motor para crear obras de arte visuales basadas en el realismo. Así mismo diversas academias y escuelas de arquitectura ofrecen cursos sobre Unreal Engine para llevar a cabo el diseño de las propuestas de sus clientes.

## Herramientas de Unreal Utilizadas en el Proyecto

Durante la realización del proyecto se han utilizado las siguientes funcionalidades que proporciona Unreal Engine 4:
* Utilización de BluePrints y diversos eventos a través de los mecanismos de colisión.
** Uso de TimeLines.
** Concatenación de varios niveles a través de level streaming.
** Animación mediante la modificación de la máquina de estados.
** Utilización de sockets para realizar la animación.
** Creación de sonidos a través de Sound Cues. Creación de sonido ambiente y diversos sonidos como el ruido de los pasos.
** Proporcionar Inteligencia Artificial a través de Behaviour Trees.
** Utilización de partículas.
** Utilización de interfaces para llevar a cabo notificaciones de eventos.
** Creación de un WrapBox junto a su funcionalidad.
** Uso de la clase GameMode y GameModeInstance para mantener la información entre niveles.
** Construcción de diversos widgets dinámicos y hood.

## Conclusiones

La experiencia con el motor de videojuegos ha sido buena. Nos hemos encontrado con un entorno intuitivo y amigable facilitando la interacción con el usuario. En nuestro caso ninguno de los tres miembros del grupo habíamos trabajado antes en el mundo de los videojuegos y no nos sentíamos atraídos por el mismo, en parte por nuestra formación más teórica. Después de los 4 meses en los que hemos estado cursando la asignatura Tecnologías Multimedia e Interacción podemos decir que nuestra opinión sobre este campo de la informática ha cambiado. Nos hemos entretenido y nos ha parecido atractivo.
En cuanto a la experiencia personal, al proyecto le hemos dedicado un curso de programación en Unreal Engine 4 de 40 horas, 2 horas semanales en las clases de laboratorio de la asignatura y varias horas semanales más mínimo fuera del horario de la asignatura para afianzar los conceptos aprendidos y trabajar e investigar con el propio motor. Además hemos trabajado con el libro citado en la descripción.
Sin embargo, pese a considerar que el motor de videojuegos es intuitivo y fácil de usar, como se ha comentado anteriormente, consideramos que es necesaria una formación básica previa para su uso. Nosotros comenzamos trabajando en el proyecto con el libro referenciado en el párrafo anterior y estábamos bastante perdidos. Hasta que no adquirimos los fundamentos del motor no pudimos comenzar a trabajar.
También nos gustaría destacar el gran potencial que presenta el motor Unreal ya que internamente todo es transformado a código en C++ que posteriormente es compilado y ejecutado.
En cuanto a la documentación existente destacar que ha sido complicado ya que no hay en gran número ni de calidad. La mayoría de la documentación o tutoriales presenta descripciones de los elementos pero no indica como utilizarlos lo que provoca que el aprendizaje de la utilización del motor sea más lento y hayamos tenido que recurrir al IRC oficial de Unreal.

## Enlace a Contenidos Relacionados

* https://www.unrealengine.com/
* https://github.com/tutugordillo/TMI