Comet Project: diario de desarrollo

Bienvenidos al PROYECTO COMET!

En este video, os comparto las primeras etapas del prototipo. Aún es rudimentario, pero representa el principio de mi visión para lo que este proyecto puede llegar a ser. En esta etapa del desarrollo, estoy completamente centrado en crear un prototipo funcional para probar la jugabilidad; aún no he trabajado en los gráficos, ya que esa fase la reservo para el futuro si el prototipo resulta viable. Aquí intento mostraros brevemente algunas funcionalidades básicas, incluyendo los brazos de la nave diseñados para abordar los escombros espaciales, todo operado con el simple toque de un botón. Esto es solo el comienzo, y queda mucho por refinar y mejorar.

Empleo físicas básicas para manejar las colisiones, asegurando que el control sea fluido, responsivo y rápido. La nave está construida sobre un esqueleto, y las animaciones de los brazos utilizan técnicas de Cinemática Inversa (IK) para alcanzar objetos cercanos de manera eficiente. Este enfoque no solo mejora el realismo de las interacciones dentro del entorno del juego, sino que también contribuye a una experiencia de jugador más intuitiva y atractiva.

...

Hola proyecto "COMET"

Resulta que estoy decidido a sacar un juego y, casi se podría decir que, perder el anterior fue un golpe de suerte.

Como ya mencioné en mi post anterior, voy a emprender un proyecto más pequeño y, en este momento, me encuentro en su fase de "pre-producción", que básicamente consiste en redactar el GDD (Game Design Document).

El GDD es el documento que recoge absolutamente todo sobre tu juego, desde la historia, personajes, guión e ideas generales hasta el más mínimo detalle sobre la jugabilidad, IA de enemigos, diseño de niveles, arte, música, etc. Incluso se pueden detallar aspectos financieros y de marketing del juego. Se considera un documento "vivo" ya que en él se debe reflejar todo lo nuevo que se va añadiendo al juego, así como los cambios que puedan surgir respecto a lo escrito originalmente durante el desarrollo.

...

Cambio de rumbo... ¿forzado?

Hola a todos,

La vida, amigos míos, tiene un sentido del humor retorcido. Y a veces, el universo parece confabularse para recordarte que, en este baile de codificación y desarrollo, no siempre llevas la batuta.

Habéis estado siguiendo el progreso de mi último proyecto. Pues bien, resulta que se ha corrompido. Sí, lo sé, parece una mala broma, ¿verdad? Además, mi copia de seguridad decidió tomar unas vacaciones permanentes en el peor momento posible, porque, ya sabéis, ¿por qué no añadir un poco de sal a la herida?

...

Sistema de inventario - parte 2

En este post, demostraré cómo colocar una interfaz sobre la pantalla del juego. Sin embargo, no entraré en detalles sobre cómo crear esta interfaz de usuario de inventario. En un futuro post, demostraré cómo interactuar con el inventario. Para mi prototipo de juego, quiero lograr algo sencillo, como esto:

Bastante simple y feo, pero funcionará por ahora.Dibujando la Interfaz

Para dibujar la interfaz, creé dos Widget Blueprint, puedo crear uno nuevo a través del menú contextual en la carpeta de contenido.

...

Sistema de inventario - parte 1

El paso siguiente en mi proyecto será crear un sistema de inventario para el jugador y contenedores de almacenamiento como cofres. El sistema de inventario tendrá tres componentes: el personaje del jugador, los objetos coleccionables y el inventario donde se almacenan los objetos coleccionados.Inventory Component

Para crear el inventario, usaré un Componente Actor, un tipo especial de Blueprint que se puede adjuntar a cualquier Actor y puede agregar variables, funciones, interfaces, etc. Sin embargo, no puede agregar mallas o componentes renderizables.

El componente tendrá tres variables importantes:InventoryItems: una lista de artículos que se han recolectado y se almacenan en el inventario.MaxSize: un entero que indica el número máximo de artículos que se pueden almacenar en el inventario.ActualSize: un entero que indica el número de artículos actualmente en el inventario. Se utiliza para verificar si se puede tomar un objeto.

...

Consejos para ordenar Blueprints

Este es un post muy corto para compartir estos interesantes video que pueden ayudarnos a entender y trabajar mejor con nuestros Blueprints.

En mi último post expliqué un difícil concepto de programación llamado "Interfaces". Acabo de encontrar este interesante video del canal de Youtube "Glass Hand Studios" que lo explica con un ejemplo básico. Pienso que puede ser más claro seguir este tutorial que mi post:

Glass Hand Studios - I Struggled With Blueprint Interfaces for Years!! (Unreal Engine 5)

...

¿Por qué son útiles los Blueprints Interface para hacer botones?

Para hacer botones, he hecho algunos Blueprints complejos con mucha lógica para lograr buenos efectos y jugabilidad. En este vídeo de Youtube puedes ver el resultado: Botones - Vista previa de funciones

Para hacerlos hice una estructura de herencia similar a la que he hecho con las lámparas, así tengo las mismas características de lámpara en mis botones: ruido, chispas, luz, etc. No iré paso a paso porque mis Blueprints de los botones son muy complejos, pero explicaré las ideas generales sobre las "interfaces de Blueprints" que me permiten hacer la interacción de los botones. ¿POR QUÉ NECESITO INTERFACES BLUEPRINT?

Ahora tengo un nuevo problema: cualquier botón de mi juego puede interactuar con cualquier otro objeto u objetos. Por ejemplo: un botón puede encender o apagar un grupo de luces en una habitación, activar un evento como girar una vez una puerta giratoria, etc.

...

Luces con más prestaciones

En mi última publicación he creado un Blueprint base para hacer lámparas en mi juego llamado BP_BaseLamp. Con esta lámpara base tengo un sistema de iluminación básico y ahora necesito agregar algunas características que serán útiles para mejorar el ambiente del juego.

Necesito agregar principalmente dos cosas: Algo para crear un sonido ambiental, como un zumbido eléctrico. Algo para hacer alteraciones de luz con variaciones de intensidad para representar lámparas que funcionan mal.

Para el ambiente de sonido, he agregado un componente de sonido que se puede activar a través de una variable booleana pública. Es parte del Blueprint de la lámpara base, por lo que puedo establecer un ambiente de sonido diferente para cada Blueprint de lámpara derivado con un sonido predefinido. Además, podré establecer un sonido diferente al predefinido en cada instancia de lámpara.

...

Creando múltiples tipos de luz con la herencia de Blueprints

En mi última publicación hablé sobre la diferencia entre usar Lumen o iluminación tradicional y por qué me interesa la opción tradicional.

Además, creé un Blueprint de configuración de escena para controlar el "PostProcessVolume" y cambiar entre Lumen y la iluminación tradicional usando el editor Unreal Engine y dentro del juego.

Ahora profundizaré en mis Blueprints de luces para tomar algunas notas importantes sobre la herencia y las instancias de los componentes porque hay algunos conceptos confusos que quiero aclarar. HERENCIA

...

Iluminación Lumen vs normal

Empecé a hacer mi sala de pruebas con algunas habitaciones y luces.

Primero hice un blueprint que tenga una luz funcional y quiero activarla o apagarla cuando lo necesite, tal vez presionando un botón o desde un evento. Para lograrlo, coloco una malla de cubo simple que sostiene toda la estructura y una malla de esfera con un material brillante especial que representará la bombilla. Luego coloco un cono de luz unido a la esfera para hacer la iluminación que quiero.

Sé que esta no es la malla más optima, pero es solo con fines de prueba. A partir de aquí haré un blueprint principal para hacer unos blueprints hijos que hereden las propiedades principales y con algunas opciones y mallas específicas.

...

"Personalizando" el componente pawn sensing

Hola! ¡Ha pasado un mes desde la última publicación! Estaba muy ocupado pero finalmente pude encontrar algo de tiempo para el proyecto.

Me quedé atascado con un pequeño detalle con mi lógica de detección del "Poison Drone": no puedo girar sólo la cabeza del dron y hacer que el componente "pawn sensing" mire en la misma dirección que la cabeza.

Este es el dron mirando adelante, como puedes ver el componente de detección también mira adelante:

...

Persiguiendo al jugador

Para hacer el centinela Poison Drone que persiga al jugador, en primer lugar, he creado un blueprint en el que he añadido algunas piezas del pack de assets que he comprado, este pack de assets tiene piezas y materiales interesantes y me permite crear diferentes prototipos de drones para mi juego.

Ya enseñé parte de este diseño en el post anterior, ahora ha quedado algo así. No me interesa evolucionar más este diseño por ahora ya que para ser un prototipo ya me vale:

El ojo rojo brillará en la oscuridad, pretendo ayudar al jugador a localizar al Poison Drone a la vez que hacer que sea inquietante.

...

Diseñando el Poison Drone

En el juego habrá algunos centinelas en la nave buscando destruirte.

Durante el ataque, la IA principal activa todos los drones y robots para buscar y destruir a los atacantes, pero durante los disparos, la nave sufre graves daños y la IA pierde la conexión con sus centinelas. Entonces, Mark tiene que arreglar todo este lío con todos los drones y robots buscándolo pensando que es otro atacante.

La jugabilidad principal será tratar de evitar a los centinelas pero, si tienes objetos en tu inventario, tal vez podrías hacer una trampa para eliminarlos uno por uno. Entonces, ahora quiero diseñar un enemigo simple.

...

Añadiendo animaciones al personaje

Estaba jugando con los Animation Blueprint e hice la animación agachada. Me di cuenta de que todavía tenía problemas con algunas animaciones que no se adaptaban al 100% al Metahumano, así que me tomé un descanso para pensar qué hacer. Mientras tanto, estuve jugando a Return to Monkey Island las últimas semanas. ¡Qué gran juego! ¡Gracias, Ron Gilbert!

Para acelerar la creación de mi prototipo del juego, finalmente, decidí usar un retargeter en tiempo real sobre mi Metahuman en el Animation Blueprint usando como base el maniquí de Unreal 5. Luego obtengo las animaciones de la biblioteca y las transformo en animaciones del maniquí de Unreal 5 usando un retargeter del maniquí de Unreal 4. El resultado está lejos de ser perfecto pero funcionará por ahora.

Este es el resultado con la animación de agacharse:

...

Aplicando animaciones del Marketplace sobre el Metahuman

Cómo dije en el anterior post ahora he probado con animaciones que puedo encontrar en el Marketplace en lugar de grabar mis propias animaciones. Encontré un paquete de animaciones gratuito bastante interesante con el que empezar a construir mi personaje para el prototipo del juego. El problema ha sido que eran animaciones creadas para el esqueleto de Unreal Engine 4 y al aplicarlo sobre el nuevo esqueleto hay que hacer ajustes porqué el resultado es este:

Como se puede ver en esta animación generada en el Retargeter el personaje camina con los brazos muy abiertos y los dedos deformados.

Para arreglar esto hay que seguir una serie de pasos:

...

Live Link Face

Después de estudiar mis posibilidades actuales con la captura de movimientos he hecho la misma investigación para la captura facial.

Es importante ya que no es lo mismo tener un personaje que mueve el cuerpo pero tiene la cara estática que tener un personaje que tiene expresión facial mientras se mueve.

Por ejemplo, aquí abajo pongo la animación de Mark en posición de espera. Vereis a la izquierda el personaje sin expresión facial y a la derecha lo mismo pero con una captura facial.

...

Investigación sobre MOCAP

Estos días he estado investigando acerca de sistemas de captura de movimiento para grabar animaciones para mi personaje. Cómo tengo a disposición un impresionante presupuesto de 0€ y poco espacio he buscado opciones lo más económicas posible.

Mi idea era capturar animaciones para seguir con el desarrollo de mi personaje, entre ellas necesito animaciones de caminar, correr, agacharse, pulsar botones y crafteo de objetos del inventario. Ahora me encuentro en una fase del desarrollo muy temprana, el prototipo, esto implica que quiero obtener una base jugable para evaluar si mi idea es divertida de jugar y me he dado cuenta que no es el mejor momento para complicar el desarrollo.

Así que he decidido que por ahora voy a comprar assets de animación con los que crear el prototipo del juego.

...

Diseñando el protagonista

"Él es Mark, un tio normal cansado de su trabajo porqué es duro y solitario. Es el ingeniero encargado del mantenimiento de una nave de carga automática en el espacio y lleva cinco meses siendo el único tripulante supervisando el traslado de materiales entre la Tierra y la estación Ark1 en el punto de Lagrange L2."

Mark es el nombre provisional que tendrá el protagonista durante el desarrollo del juego ya que no tengo claro como llamarlo por ahora. Para crear a Mark he usado la tecnología Metahuman de Epic, se trata de un creador de humanos parecido a un editor de personajes que podríamos encontrar en un video juego como por ejemplo Mass Effect.

Mi intención es importar el personaje en Unreal Engine y basar el desarrollo usando este "metahumano", por lo que todas las animaciones y su lógica irán ligadas a esta tecnología. Seguramente en un futuro le haré cambios pero por ahora estoy bastante satisfecho con el resultado que he obtenido ya que, al final, se va a ver un poco lejos y me preocupan más otros aspectos como por ejemplo: como lo voy a animar.

...

¿Qué juego quiero hacer?

Tengo en mente hacer un juego corto de supervivencia de ciencia ficción. No tengo claro la duración pero por ahora no creo que vaya a superar las 5 horas. Argumento

El juego va a transcurrir en un futuro no muy lejano durante la construcción de unas gigantescas estaciones espaciales en el punto de Lagrange L2, cerca de los restos del telescopio James Webb. Para lograrlo se usan enormes transportes espaciales comandados por una IA y con una tripulación formada unicamente por un técnico de mantenimiento humano y, para evitar ataques y polizones, robots y drones centinela. En el juego encarnaremos al técnico de mantenimiento en una de estas naves de carga y, obviamente, algo sale mal.

Hay una explosión que causa graves daños a la nave y la IA que la gobierna pierde el control de todos los sistemas y de los centinelas que, por algún motivo, se quedan programados en modo “búsqueda y eliminación”. El juego empezará en este punto y habrá que hacer las reparaciones necesarias y conseguir llevar la nave a buen puerto mientras sobrevivimos a los ataques de los robots centinela.

...

Instalando Unreal Engine

El primer paso lógico es instalar Unreal Engine y empezar a trabajar. En este post describiremos brevemente como instalar el motor.

Antes de seguir quisiera recalcar que todos los pantallazos serán en inglés. Esto es porqué es recomendable usar la versión en inglés del software ya que no está del todo bien traducido al Español. Además, otro motivo por el cual es aconsejable usar Unreal en inglés es porqué los conceptos en el mundo de la programación tienden a ser en inglés, por ejemplo: solemos decir "shader" en lugar de "sombreador" para referirnos a la parte del software que dibuja la pantalla.

Dicho esto, ya podemos continuar.

...

Consejos iniciales

Antes de empezar con mi proyecto, incluso antes de empezar a diseñar como quiero que sea mi juego, toca familiarizarse con Unreal Engine.

Yo he estado aprendiendo lo que he podido en tutoriales, cursos de Udemy, etc. y quisiera aconsejar recursos gratuitos donde empezar para aprender a manejar de una manera práctica y facil Unreal.

Al ser recursos gratuitos son limitados pero pueden ser de mucha utilidad ya que este software es complejo en un inicio y es facil perderse.

...

¿Por qué Unreal Engine?

¿Por qué Unreal?

Es una pregunta difícil de responder...

Existen multitud de soluciones y motores gráficos en el mercado (Unity 3D, Godot, Game Maker, etc) y todos son buenas opciones pero no para cualquier proyecto. Hay que pensar en qué juego se quiere hacer y buscar la opción que mejor se adapte a las necesidades del proyecto que se quiere crear. Sea como sea se debe conocer cada una de las opciones y se hace complicado o imposible poder tener la certeza de que habrás elegido bien.

...