Mi experiencia construyendo un mini-juego con Godot engine

Elihu A. Cruz
7 min readMar 9, 2021

--

Photo by Carl Raw on Unsplash

Este artículo es de experiencias personales y trato de no profundizar en aspectos técnicos.

Hace unos meses, comencé a desarrollar un juego para dispositivos móviles, con el fin de experimentar un poco el proceso. A decir verdad tenia ganas de empezar con esto, pero no me acababa de decidir y siempre terminaba posponiéndolo.

A inicios de Noviembre del 2020 inicie con este proyecto (Space tower en sus inicios, que termine cambiando por Asteroid blaster).

Crear un juego involucra diferentes habilidades y cada fase de la creación del producto necesita tiempo para completarse adecuadamente, debido a esto, antes de comenzar decidí investigar un poco como poder simplificar este proceso y llegue a algunas conclusiones:

  • Debía utilizar un motor de videojuegos. Los cuales hay muchos pero al final terminé por escoger a Godot. Algunas de la razones fueron: El hecho que es Open Source y que cumplía con uno de los objetivos para evitar costos extra (debido a que era un proyecto personal), el motor esta tomando popularidad, cuenta con buena documentación y su comunidad (Foros de ayuda y Comunidad en Discord) es buena.
  • El arte de tu videojuego es importante y debes definir un estilo y ser consistente. En mi caso decidí hacer algunos assets basándome en imágenes pixel-art. Esto me permitió diseñar los assets más fácilmente e iterarlos si no me gustaban.
  • Debía utilizar música y sonidos libres, y dar atribución del autor.
  • Los sonidos o efectos del juego puedes generarlos con un software llamado BFXR, es gratuito y sirve para construir mas o menos un entorno que tenga sentido con tu juego.
  • La música decidí que seria demasiado difícil para mí componer e interpretar algo medianamente decente, entonces recurrí a buscar personas que tienen esta habilidad y permiten que uses su trabajo con la respectiva atribución.

Intro a Godot

Para comenzar con este juego tome el tutorial de Godot para aprender los conceptos del motor.

Mi primer impresión fue buena, la guía te introduce a los conceptos más elementales del motor como los Nodos, Escenas, Eventos/Signals. y a mi parecer es detallado al explicar lo que tienes que hacer, no es tan fácil que te pierdas, pero si es bueno tomarte el tiempo e ir despacio para poder seguir la guía.

Algo que me gusto bastante fue la forma en cómo el motor separa las responsabilidades en “Escenas” donde puedes añadir lógica a esta nueva escena con un script.

Hablando de scripts, Godot utiliza una version similar al lenguaje de programación Python, llamado GScript y tiene una sintaxis similar.

A su vez, estas escenas están formadas por nodos que tienen atributos y cada nodo puede emitir señales, lo cual me parece interesante y me facilito poder interactuar entre los componentes.

Tras finalizar mi pequeña demo, sentí que ya me encontraba listo así que comencé un nuevo proyecto y me puse a trabajar.

Prototipo

Primeros prototipos del juego

Para iniciar con este juego tenia la intención de crear un sistema de controles sencillo, básicamente solo tocar la pantalla y que el programa hiciera los cálculos solo. El concepto inicial constaba de una especie de “torre” que debía evitar ser golpeada o perder vida, a toda costa. Entonces introduje la mecánica de disparar para defenderte o destruir a tus enemigos, siendo que es una mecánica ya bastante conocida, ayudaría a los jugadores a entenderlo rápidamente.

Inicie el prototipo con algunos fragmentos como la escena principal del juego, con bordes, una torre/personaje y los enemigos. Los enemigos iniciaban en una coordenada aleatoria y tenían dirección igual aleatoria. Ambos nodos fueron de una clase de Godot llamada “KinematicBody” y tenían un nodo de colisiones que me permitía conocer cuando un personaje impactaba con otro.

Luego de eso introduje un sistema de detección de eventos por cursor o pantalla táctil, el cual, captaba el evento de click o interacción con la pantalla. Usaba esto con dos fines, uno era saber cuando el personaje debía disparar y el otro fin era conocer a dónde disparar, muy similar a un juego de pool de teléfono móvil. Tome la coordenada del evento y con un poco de trigonometría podía usarlo en un algoritmo que me permite apuntar 360 grados.

Con ya tenia la mecánica básica del juego lista, y tras una serie de iteraciones jugando y depurando, quedo bastante bien.

Arte

Diseño de nave con Asprite

El arte es uno de los temas más complicados para mí, debido a que no tengo la experiencia suficiente con las herramientas gráficas que se usan regularmente.

Para el desarrollo utilice 2 herramientas para construir los assets necesarios.

En mi trabajo por lo general he utilizado Figma y Adobe xd ambos son softwares que utilizamos para diseñar las vistas de un producto, pero también sirve para editar imágenes, por eso termine usando Adobe xd que ademas es un software gratuito, solo debes crear una cuenta de Adobe cloud.

Para los sprites, como mencione un poco antes, decidí utilizar un estilo basado en pixel art, para simplificar la creación de los assets. Si bien, fue más rápido para crear los elementos necesarios del juego, tuve que dedicar un tiempo para buscar referencias y aprender a usar Asprite, el software que termine por comprar debido a sus buenas reseñas y que se me hizo bastante fácil de usar.

Al final termine por crear cada uno de los assets, me llevo bastante tiempo a decir verdad, porque no terminaba de convencerme, pero al final sentí que estaba tardándome demasiado y más adelante podría pulir los detalles.

Música

La música al igual que el arte visual, era un reto jamas he compuesto una melodía en mi vida, y eso era un problema para un juego independiente. Después de ver diferentes opciones y gastar cerca de una semana intentando componer algo, decidí que seria mejor buscar soundtracks con licencias que permitieran su uso con la respectiva atribución.

Luego de explorar algunas opciones encontré un sitio de una persona que se dedica a componer diferentes soundtracks en diferentes escenarios. Además de la música, hacia falta integrar efectos de sonido, esa parte fue más sencilla pues, encontré un software que te permite crear efectos de sonido y los exporta a wav. Empece a jugar con las opciones del programa y al final integré los sonidos al juego.

Generar una aplicación

La idea original era generar una aplicación para android y distribuirlo con algunos amigos para que me dieran un poco de feedback, pero al final, sentí que seria una buena idea publicarla en la tienda de google para tener esta parte de la experiencia y así fue, comencé a intentar exportar mi proyecto de Godot a una aplicación de android pero lo que no contaba era que debía realizar una serie de configuraciones con Godot para usar una plantilla que tuviera la información necesaria de la aplicación. Además debía descargar Android studio (o su equivalente de SDK) para construir la aplicación, también necesitaba generar dos llaves una para desarrollo (debug keystore) y otra para producción.

Después de esa odisea, me di cuenta que el archivo APK no funcionaba… pero era debido a un error en mi proyecto que incluía archivos de un plugin del editor (AspriteWizard) que por alguna razón contenía archivos que corrompían la aplicación al exportarse.

Finalmente pude instalar la aplicación en mi teléfono para comenzar a probar y para mi sorpresa la resolución no era la adecuada, porque Godot como es lógico, se maneja con medida de pixeles, y la aplicación no ocupaba el 100% de la pantalla. Afortunadamente esto se soluciona habilitando las funciones de resize en modo stretch, pero debes tener en cuenta la relación aspecto de tu juego, pues si no encaja en el teléfono estará muy estirado y podría no verse como esperas.

Luego me decidí a crear un nombre de marca para relacionar los proyectos que planeo seguir creando (algún día…), esta marca seria Auxtria y por el momento hice una pequeña landing page con información del juego que menciono. Ademas de configurar unos servicios de google para los marcadores y Admob para ver un sistema de recompensa cada vez que el usuario pierda, se da una opción para continuar su partida viendo un video publicitario (únicamente con fines de aprendizaje 💸).

Conclusión

Antes de iniciar con este proyecto tengo que admitir que subestime el proceso de desarrollar una juego tan pequeño como este, pero creo que fue interesante y divertido adentrarse en todo el flujo y aprender a la par de ir construyendo el juego. Los puntos que describí, espero sean una guía que puedas considerar si estas tentado a crear juegos con este motor de videojuegos. Godot realmente hizo muy fácil para mi introducirme en el mundo del desarrollo de videojuegos, con los conceptos y herramientas que cuenta, si bien es cierto que no tiene tantas integraciones como otros motores como Unity, pero en lo personal creo que es una buena opción para iniciar y la comunidad es muy activa y gracias a ellos he podido integrar servicios de terceros sin morir en el intento. A resumidas cuentas, si estas indeciso en que motor usar creo Godot es una opción excelente para iniciar y los resultados son bastante buenos, lo único que necesitarás será dedicarle un poco de tiempo e imaginación 🔸.

Demo

Si deseas probar el juego de este artículo, te dejo el enlace a google play: Asteroid Blaster 👽

--

--