# Desarrollo de Videojuegos con Unreal Engine

Bienvenido a este proyecto de aprendizaje dedicado a conocer los fundamentos del entorno Unreal Engine y a utilizar sus diversas herramientas para desarrollar videojuegos de un nivel de complejidad entre básico e intermedio.
Este proyecto forma parte de la Wikiversidad. Te invitamos a saber más sobre ella y a averiguar cómo dar tus primeros pasos por aquí. Además te recomendamos consultar el manual de estilo y las políticas que aplican a la hora de trabajar en la edición colaborativa de estas páginas.........

## Objetivos

Este proyecto de aprendizaje nos ofrece la posibilidad de estudiar la organización interna y el funcionamiento de un entorno tan potente como es Unreal Engine y aplicarlo en el desarrollo de videojuegos de complejidad moderada, trabajando desde el punto de vista del diseñador de juegos, un perfil de desarrollador de videojuegos que debe contar con algunos conocimientos en creación y edición de recursos gráficos 2D/3D y sonoros, además de ciertas nociones de programación orientada a objetos y basada en eventos. En este proyecto se hace especial hincapié en las herramientas imprescindibles para construir escenarios, integrar personajes y objetos, realizar secuencias animadas y en definitiva definir comportamientos utilizando esquemas de programación visual.
Además se nos incita a poner en práctica lo aprendido desarrollando un proyecto real, es decir, un pequeño juego con los elementos necesarios para demostrar lo que es posible desarrollar en este entorno en poco tiempo y sin demasiado esfuerzo ni experiencia previa.

## Materiales didácticos

Los principales materiales didácticos de este proyecto son las lecciones que se desarrollan colaborativamente entre todos los participantes. Estas lecciones, y en general cualquier actividad que se realiza en este proyecto de aprendizaje, puede tener asociadas una serie de lecturas recomendadas: fuentes bibliográficas, guías, tutoriales, enlace a la documentación oficial de Epic Games o de otros foros o comunidades de desarrolladores, etc. Las fuentes más relevantes a todo el proyecto de aprendizaje se recopilan en la sección de referencias de esta misma página.
Disponemos de un calendario, con las fechas reales del primer curso que se impartió y que sirvió como base para este proyecto y donde se anotaron las tareas reales que se iban realizando día a día. La idea es que estas fechas y tareas puedan servir como referencia a la hora de adaptar el proyecto de aprendizaje a las circunstancias concretas de cada participante.

### Lecciones

A continuación se presenta un listado con las distintas lecciones que se van generando como material didáctico para este proyecto de aprendizaje. Es importante que sigas estos consejos para redactar lecciones a la hora de modificarlas o crear algunas nuevas.
Las lecciones están divididas en nueve grandes bloques. Recomendamos que las lecciones identificadas como "avanzadas" sean directamente ignoradas por aquellos participantes que todavía no tengan cierta experiencia en el desarrollo de videojuegos con Unreal Engine.

#### Bloque 1: Instalación y proceso de desarrollo

Todo lo relativo a los preparativos necesarios para trabajar con Unreal Engine e instalarlo en tu ordenador, además de teoría para tener una visión global del proceso completo de desarrollo de videojuegos con esta herramienta. Se incluye un ejemplo, ya que esto permite aclarar las ideas desde el principio y así hacer que el participante entienda el contexto de todas las próximas lecciones.
Lecciones (todas ellas básicas):
* Requisitos de uso de Unreal Engine
* Instalación de Unreal Engine
* Proceso de desarrollo de videojuegos con Unreal Engine
* Ejemplo del proceso de desarrollo de un videojuego con Unreal Engine

#### Bloque 2: Creación de niveles y contenidos

Estas lecciones exponen cuestiones básicas que es necesario conocer acerca del entorno integrado de desarrollo de videojuegos Unreal Engine. Se enseña el manejo básico del editor de niveles, pieza central del entorno Unreal Engine, para posicionar actores en la escena y cosas así.
Lecciones básicas:
* Manejo básico del editor de niveles de Unreal Engine
** Guía rápida del editor de niveles de Unreal Engine
** Actores en Unreal Engine
** Etiquetas para actores en Unreal Engine
* Fundamentos de Unreal Engine (del motor)
* Fundamentos de Unreal Editor (el editor de niveles) https://docs.unrealengine.com/latest/INT/Engine/UI/LevelEditor/index.html
* Gestión de contenidos
* Niveles
* Cámaras (https://docs.unrealengine.com/latest/INT/Gameplay/HowTo/UsingCameras/index.html en vez de llevármelo a gameplay)
Level Design
Los entornos integrados de desarrollo de videojuegos Una panorámica del entorno El motor Unreal y sus herramientas La plataforma Unreal Engine 4 Requisitos e instalación de Engine 4 (llevármelo muy al principio) Los primeros pantallazos El marketplace Recursos para aprender Los proyectos (una vez hayan visto uno abierto y tal…)
Lecciones avanzadas:
* Unreal Engine avanzado
* Unreal Editor avanzado
* Gestión de contenido avanzada (mucho)
* Creación de contenidos [para Artistas]... parte al bloque 3, seguramente
* Transmisión de niveles (para mundos contínuos... y persistentes -MMOG y similar-)

#### Bloque 3: Creación de escenarios y efectos visuales

Estas lecciones...
Lecciones básicas:
* Renderizado (geometría, mallas estáticas y de otros tipos)
* Texturas
** Hay un modo para pintar mallas estáticas, directamente: https://docs.unrealengine.com/latest/INT/Engine/UI/LevelEditor/Modes/MeshPaintMode/VertexColor/index.html (BSPs no se puede)
* Iluminación
* Materiales y sombreadores
* Simulación física
** Colisiones a nivel básico, sus respuestas: https://docs.unrealengine.com/latest/INT/Engine/Physics/Collision/index.html
* Sistemas de partículas
* Efectos de post-procesamiento
Lecciones avanzadas: (ya para enriquecer escenarios)
* Rendering avanzado?
* Mallas destructibles https://docs.unrealengine.com/latest/INT/Resources/ContentExamples/Destructables/index.html
No sé si este tutorial sea de utilidad: https://www.youtube.com/watch?v=QIvcTwlosMQ#t=58
* Iluminación avanzada
* Materiales avanzados
* Creación de materiales [para Artistas]
* Cerchas (curvas polinomiales a trozos o splines) y los componentes de una Spline Mesh. Las curvas de Beziel son un ejemplo. Tutorial en video: https://www.youtube.com/watch?v=MqPeFIEJUmg
* Terreno (y pintar terreno). También herramientas de splines para usar sobre terrenos: https://docs.unrealengine.com/latest/INT/Resources/ContentExamples/Landscapes/1_2/index.html
* Vegetación
* Simulación física, más avanzada
* Sistemas de partículas (¿y otros efectos especiales?) avanzados
* Efectos de post-procesamiento

#### Bloque 4: Programación de sucesos y comportamientos

Estas lecciones hacen referencia al ...
Lecciones básicas:
* Modelo del juego, de sus niveles y escenarios (conceptos básicos de gameplay, armazón/arquitectura de Unreal con pawn, character, etc.)
* Programación textual (C++) y visual (esquemas)
* Entradas del usuario
* Maneras y recomendaciones para comunicar esquemas https://docs.unrealengine.com/latest/INT/Engine/Blueprints/UserGuide/BlueprintCommsUsage/index.html
* Encontrar actores dentro de esquemas https://docs.unrealengine.com/latest/INT/Gameplay/HowTo/FindingActors/Blueprints/index.html
* Lógica del juego (mediante esquemas/blueprints)
** Guía sobre cómo hacer...
* Dinámica del nivel (mediante esquemas/blueprints)
** Guía sobre cómo hacer...
* Mecanismos del escenario (mediante esquemas/blueprints)
** Guía sobre cómo hacer...
** Líneas de tiempo
** Sobre cómo mover cámaras: https://docs.unrealengine.com/latest/INT/Gameplay/HowTo/UsingCameras/Blueprints/index.html
* Simulación física
** Colisiones y fuerzas a nivel básico
* Inteligencia artificial
** Guía sobre cómo hacer
* Programación en C++ [Programadores]
Lecciones avanzadas:
* Entradas del usuario avanzadas (touch?)
* Lógica del juego avanzado (mediante esquemas/blueprints)
** Guía sobre cómo hacer...
* Dinámica del nivel avanzado (mediante esquemas/blueprints)
** Guía sobre cómo hacer...
* Mecanismos del escenario avanzado (mediante esquemas/blueprints)
** Guía sobre cómo hacer...
* Interacción entre comportamientos y física
** Manejo de bolas o intervención en comportamientos físicos sencillos
** Vehículos (podría haber subcategorías)
* Inteligencia artificial avanzada
** Hacer Splines con esquemas:
https://docs.unrealengine.com/latest/INT/Resources/ContentExamples/Blueprint_Splines/index.html
https://docs.unrealengine.com/latest/INT/Videos/Player/index.html?series=PLZlv_N0_O1ga0aV9jVqJgog0VWz1cLL5f&video=wR0fH6O9jD8&utm_source=uelauncher&utm_medium=software&utm_campaign=learntab
** Behavior Tree, como este tutorial de Víctor Blanco.
** Guía sobre cómo hacer..
* Programación en C++ avanzada [Programadores], tal vez con su lógica, dinámica y mecanismos
Muy bueno, sobre cómo ir gestionando la creciente complejidad en los blueprints que programamos: https://www.unrealengine.com/blog/managing-complexity-in-blueprints
Programar sistemas de uso de objetos, como este tutorial de Víctor Blanco.
Los Blueprints vienen siendo un Kismet 2 (internamente las clases C++ que los compilan se llaman Kismet, de hecho). Aunque ya no haya UnrealScript, los blueprints se compilan a UnrealScript bytecodes: https://docs.unrealengine.com/latest/INT/Engine/Blueprints/TechnicalGuide/Compiler/index.html
Ahora ya hay un inventario hecho con Blueprints y UMG también, en los tutoriales oficiales.

#### Bloque 5: Gestión de recursos audiovisuales

Lecciones básicas:
* Música
* Sonidos
La introducción oficial al sistema de sonido: https://docs.unrealengine.com/latest/INT/Engine/Audio/Overview/ El componente básico es Ambient Sound Audio: https://docs.unrealengine.com/latest/INT/Engine/Audio/SoundActors/index.html Y luego es importante conocer los volúmenes, concretamente los de Audio: https://docs.unrealengine.com/latest/INT/Engine/Actors/Volumes/index.html (la sección donde pone Audio Volume)
Lecciones avanzadas:
* Integración de video (Media Framework, para el inicio)

#### Bloque 6: Creación de animaciones

Lecciones básicas:
* Sprites y flipbooks (con Paper2D?)
* Sistema de animación Persona
* Animación por fotogramas clave
* Animación esqueletal
* Editor de cinemáticas Matinee
* Cinemáticas
Lecciones avanzadas:
* Paper2D avanzado
* Animación por fotogramas avanzado
* Animación esqueletal
* Cinemáticas (secuencias interactivas o no interactivas, basadas en fotogramas clave) avanzadas
Efectos especiales y cinemáticas | Gráficos que se mueven y otras cuestiones
Animation discussion, including Animation Blueprint, Persona, Skeletal Meshes, and more.

#### Bloque 7: Creación de la interfaz de jugador

Estas lecciones hacen referencia al ... interfaz gráfica del usuario/jugador
Lecciones básicas:
* Menú del juego (con esquemas... sobre componentes TextRenderer y cosas así; tal vez hacer una referencia a Slate básico [Programadores?])
* HUD in-game (con UMG y esquemas)
** Los tutoriales de Shah sobre UMGs ya han quedado desfasados, ahora todo es mucho más fácil
Lecciones avanzadas:
* Menú del juego (Slate avanzado -cómo se hizo el propio interfaz del entorno UE4-, [C++? Programadores] se puede hacer hasta un editor de Unreal)
* HUD in-game avanzado (con UMG y esquemas)

#### Bloque 8: Optimización y distibución del juego

Estas lecciones hacen referencia al ...
Lecciones básicas:
* Análisis y evaluación de rendimiento (profiling)
* Optimización (cambios para conseguir los FPS deseados, etc.)
* Empaquetado (generar la versión ejecutable/distribuible del juego)
** Compilar el código fuente, "cocinar" el contenido para la plataforma, empaquetarlo todo... (por defecto hablaremos de Windows 64bits)
https://docs.unrealengine.com/latest/INT/Engine/Basics/Projects/Packaging/index.html
Luego se puede usar un instalador externo a UE4 para crear la versión instalable
* Distribución y ¿comercialización? [Marketing]
Lecciones avanzadas:
* Análisis de rendimiento avanzado
* Optimización de rendimiento avanzado (eliminación de características para realidad virtual, por ejemplo)
* Implantación para plataformas específicas
** Web
*** HTML 5 (usan [Emscripten] para transformar todo el motor de C++ a Javascript)
https://docs.unrealengine.com/latest/INT/Platforms/HTML5/GettingStarted/index.html Una demostración de UE4 ejecutándose sobre Firefox, sin necesidad de plugins: http://www.polygon.com/2014/3/12/5501322/watch-unreal-engine-4-running-in-firefox
Creo que en navegadores de 64bits ya deberían funcionar demos como la de Tappy Chicken: https://www.unrealengine.com/html5
** Móvil
*** Android
*** iOS
** Realidad virtual
*** Rift
* Distribución y ¿comercialización? avanzada [Marketing] (subida al marketplace y tal)

#### Bloque 9: Desarrollo profesional de videojuegos

Estas lecciones hacen referencia al ... futuro, a seguir aprendiendo... son todas lecciones avanzadas
Lecciones (todas ellas avanzadas):
* Trabajo colaboratorivo (Engine Source, con Subversion y Performe... plugin para Git/GitHub)
Trabajo futuro | Seguir aprendiendo y experimentando Más blueprints Trabajando con programación en C++
Discuss GitHub, using source code to modify the engine, and the creation of engine plugins.
Sobre qué directorios y ficheros ignorar cuando se trabaja con el proyecto compartido en un sistema de control de versiones: http://gamedev.stackexchange.com/questions/72248/which-unreal-engine-4-project-files-can-i-ignore-in-source-control
Cuestiones pragmáticas del uso del motor, como las redirecciones que se producen al mover o renombrar recursos https://docs.unrealengine.com/latest/INT/Engine/Basics/Redirectors/index.html Lo que lleva a saber que hay commandlets, acciones especiales que se pueden realizar desde la línea de comandos https://docs.unrealengine.com/latest/INT/Gameplay/Localization/Commandlets/index.html Aquí nos recuerdan como hacer la de FixupRedirects https://answers.unrealengine.com/questions/64043/running-the-fixupredirects-commandlet.html
Generación procedural de contenidos. Un videotutorial de Training Twitch (no se encuentra directamente en el buscador de la documentación oficial) https://docs.unrealengine.com/latest/INT/Videos/Player/index.html?series=PLZlv_N0_O1ga0aV9jVqJgog0VWz1cLL5f&video=mI7eYXMJ5eI
Así se presenta una demo en la GDC: https://www.unrealengine.com/blog/demo-your-project-at-the-game-developers-conference
Plugin de Mercurial, pero también otras formas de hacer interfaces de usuario: http://lycaeum.ultimacodex.com/unreal-engine-4-gets-coherent-mercurial/
Posibles cursos que se organicen, como el curso que está intentando montar Víctor Blanco en la Facultad de Informática de la Universidad Complutense de Madrid
Asegurarnos de que este curso TRINIT es de Unreal 4, no UDK: http://trinit.es/curso/Curso_13_09_14_Taller_Iniciacion_Unreal_Engine_Centro_Recursos