Intenté hacer el mismo prototipo de juego 2D en React, Unity, Godot, Construct, Game Maker y Phaser. Esto es lo que encontré.

Soy un desarrollador de juegos de mesa. Al diseñar un nuevo juego de cartas, decidí construir un prototipo digital para ayudarme a ejecutar simulaciones y compartir fácilmente una prueba de concepto con los colaboradores.

Tengo algo de experiencia en JavaScript y C #, y me propuse como muchos lo hacen: gastando una cantidad excesiva de tiempo en "qué marco debería usar" hilos y leyendo documentación sin realmente hacer nada.

Avanzamos muchos meses, y ahora he pasado más tiempo trabajando (y luchando con) React, Unity, Godot, Construct 3, Game Maker Studio 2 y Phaser 3, en un intento de comprender qué es lo que los motiva.

Es cierto que creo que he pasado mucho más tiempo en cada uno de ellos del necesario para hacer mi pequeño juego, y probablemente podría haberme quedado con el primero y haberme equivocado en el prototipo. Espero que la siguiente información sea útil para cualquier otra persona que esté buscando un motor o un marco.

Un montón de advertencias: no estoy intentando vender un motor o marco sobre los demás, y tampoco estoy sugiriendo que uno o cualquiera de estos marcos funcionará para tu juego mejor que otro. Tampoco estoy comparando precios, funcionalidad de back-end o implementación de plataforma. Por lo tanto, dependiendo de sus requisitos, la siguiente información puede tener un valor diferente para usted.

Además, esta experiencia se basa en el desarrollo de un juego de cartas en 2D, por lo que no hablaré de motores 3D, física, etc.

También puede saltar al final para TL; DR.

El Prototipo

Mi juego, Entromancy: Hacker Battles , es un juego de cartas cyberpunk competitivo con mecánica TCG-light. Puede leer más en nuestro sitio web o ver cómo se debe reproducir en este video. Pero basta con decir que, como juego de cartas, requiere un marco digital potencial para admitir cosas básicas como la administración del estado, la interfaz de usuario, la experiencia de usuario de arrastrar y soltar y los ganchos de back-end para implementar el modo multijugador.

Teniendo en cuenta estos requisitos, exploré los siguientes marcos y motores para ver cuál sería el más adecuado para hacer mi juego ... en lugar de hacer el juego realmente (me complace decir que ahora que me he decidido por un marco, Estoy progresando mucho más).

Puedes acceder a una versión jugable aquí, y aunque el juego está más avanzado de lo que sugiere el prototipo en vivo, esta versión es bastante estable (al menos en Chrome).

Reaccionar

Después de haber construido un prototipo de generador de personajes en React para un juego de rol de mesa que diseñé, pensé que un paso natural sería darle un giro al marco para el juego de cartas. Descubrí que la administración del estado es muy sencilla (después de todo, es lo que hace React ), mientras que implementar la funcionalidad simple de arrastrar y soltar para tarjetas resultó ser una pesadilla.

Hay algunas bibliotecas que pueden ayudar con la función básica de arrastrar y soltar (por ejemplo, React DnD), pero descubrí que con un juego de cartas, necesitaba una solución más elegante para las zonas de caída, ya que Hacker Battles es muy específico sobre qué tarjetas pueden ser jugado donde y cuando.

Esta experiencia me llevó a revisar boardgame.io, que puede funcionar en conjunto con React. Pero esto finalmente me obligó a aprender otro marco además de un marco existente, que era menos que ideal para mis propósitos.

Unidad

Por interés general, había pasado mucho tiempo en Unity haciendo tutoriales y aprendiendo a usar el editor antes de intentar rehacer el prototipo del juego de cartas con él. La tienda de activos es un gran recurso, y hay tanta documentación, oficial y no oficial, que estaba seguro de poder encontrar una respuesta a cualquier problema que pudiera encontrar.

Mi experiencia con Unity hasta ahora ha sido heterogénea. Realmente disfruto trabajar en C #, y cualquier cosa relacionada con el código ha sido una experiencia relativamente sencilla. Sin embargo, Unity es muy específico acerca de su implementación y, a veces, puede parecer contrario a la intuición.

El editor, por otro lado, es un oso con quien trabajar. Para aprovechar todo el potencial de Unity, debes pasar un buen rato luchando con la interfaz de usuario para comprender dónde está todo y cómo usarlo. También está desesperadamente atrasado con el desarrollo de juegos en 2D, claramente intentando aplanar un motor principalmente 3D en un plano 2D, con resultados mixtos.

Para ser justos, disfruto bastante trabajando en el editor de Unity, por torpe que sea. Pero si está buscando un motor de juego 2D, su calidad de vida será mucho mayor en otros lugares (mire un video sobre el sistema de animación de Unity o sobre cómo lograr la perfección de píxeles y verá lo que quiero decir).

En última instancia, el manejo de Unity del espacio 2D es un poco más complejo de lo que necesito para mi prototipo, pero volveré a él para otros tipos de juegos.

Además, una barra lateral que podría ser útil para algunos: inicialmente estaba muy entusiasmado con la tienda de activos, con la idea de que podría comprar una plantilla de juego de cartas que me facilitaría mucho el proceso de desarrollo. No funcionó. La mayoría de ellos eran MTG / Hearthstone / etc. clones que requerirían tanto tiempo de desarrollo de mi parte para reestructurarlos para mi juego de cartas como para comenzar desde cero.

Godot

Lo primero que pensé al encontrarme con Godot fue: "¿motor de juegos de código abierto compatible con C #? ¡Inscríbeme!" Luego lo descargué, trabajé en un par de tutoriales básicos y lo hice fallar en la compilación. Hurm.

Varias búsquedas en Google, reinstalaciones y pelos arrancados más tarde, descubrí que tenía algo que ver con mi versión de VS Build (¿creo?), Lo que me llevó a un agujero de conejo separado. Sabía por experiencia que otros motores, entre ellos el jefe de Unity, podrían causar problemas de ruptura del juego completamente fuera de su propio código, pero este era un obstáculo molesto que probablemente influyó en el resto de mi experiencia con Godot.

En términos del editor, me gustó bastante la implementación basada en nodos de Godot, que en realidad encontré contraintuitivo proveniente de las casas prefabricadas de Unity, pero finalmente me entusiasmé. De hecho, iría tan lejos como para decir que su funcionalidad 2D es mejor que la de Unity, pero falta la comunidad, la tienda de activos (ver barra lateral arriba) y, especialmente, la documentación que tiene Unity. Si tiene la intención de trabajar en C # con Godot, por ejemplo, prepárese para buscar respuestas en el GDScript personalizado del motor y luego traducirlas a C #.

Sin embargo, he oído hablar de personas que han tenido un gran éxito con Godot mientras utilizan GDScript, por lo que si está dispuesto a invertir el tiempo para aprenderlo, puede disfrutar de lo que Godot tiene para ofrecer.

Construir 3

En las advertencias que mencioné anteriormente, mencioné que no incluyo los precios como punto de discusión. Aún así, siento que necesito mencionarlo con Construct 3, ya que resultó ser impactante en mi experiencia.

A diferencia de los otros motores de juegos enumerados aquí, que son, en su mayor parte, de uso gratuito (Game Maker Studio 2 tiene una prueba gratuita de 30 días), la gran mayoría de la funcionalidad de Construct está detrás de un muro de pago y una tarifa de suscripción en ese. Ugh.

Realmente, realmente me gusta el corte del foque de Construct para juegos simples en 2D. El editor se siente un poco como una actualización de MS Paint, pero maneja muy bien la gestión de objetos y objetos, y es simplemente fácil de usar. No me encanta que use un estilo de "secuencia de comandos visual", pero recientemente agregaron la función de escribir JavaScript antiguo y parece funcionar más o menos.

Pude desarrollar una arquitectura muy rudimentaria para el prototipo en un breve período de tiempo antes de cerrar la demostración de Construct 3 (que se ejecuta en un navegador) ... y luego intentarlo todo de nuevo más tarde con una nueva demostración. Siento que, al menos para este juego de cartas, podría hacer mucho con Construct 3, pero no estoy dispuesto a pagar 99 dólares al año (o más, como empresa) por un prototipo.

Game Maker Studio 2

YoYo Games claramente ha hecho mucho trabajo para hacer que Game Maker Studio 2 sea accesible y fácilmente navegable, y se nota. De todos los motores que he usado para este proyecto, el que más me gusta es el editor GMS. Para un proyecto pequeño, es fácil orientarse y seguir adelante con su negocio. Sin embargo, sospecho que un proyecto más grande podría salirse de control con bastante rapidez.

Esto podría estar influenciado por el lenguaje propietario de Game Maker Studio, GML (aunque GMS 2 admite secuencias de comandos visuales, que no utilicé). Funciona, pero si lo utiliza desde otro lenguaje de programación orientada a objetos (o, en realidad, cualquier otro lenguaje de uso generalizado), es posible que se rasque la cabeza ante la implementación o descubra cómo hacer algunas cosas. Si es un principiante o está dispuesto a dedicar tiempo a averiguar cómo quiere GMS que use GML, probablemente no le gustará.

Experimenté algunas peculiaridades con la funcionalidad de arrastrar y soltar de Game Maker Studio, es decir, la detección del puntero del mouse al arrastrar es un poco inestable y requiere algunos andamios para que funcione correctamente.

Creo, y esto es una preferencia totalmente personal y una pereza de mi parte, que si GMS ofreciera la posibilidad de usar otro lenguaje de programación no propietario, dedicaría el tiempo a hacer más daño aquí. Estoy a favor de subir de nivel múltiples habilidades mientras trabajo, mientras que dedicar tiempo a convertirme en un experto en el editor de GMS y GML sin poder aplicar fácilmente ese conocimiento en otros lugares no parece que valga la pena.

Aún así, es un editor 2D bastante funcional, y aunque el soporte de la comunidad puede no estar a la par con el de Unity, sigue siendo bastante bueno. Además, ten en cuenta que una vez que finalice la prueba gratuita, tendrás que pagar para seguir usando Game Maker Studio 2.

Phaser 3

Phaser es un marco de juego de JavaScript ligero y de código abierto. Hay algunos IDE de Phaser, pero si es del tipo que quiere trabajar principalmente en código, puede terminar aquí, usando Atom, Sublime o su editor favorito.

Phaser 2 fue y es ampliamente utilizado y bien documentado con un montón de tutoriales para aprovechar. Phaser 3 es lo contrario. Tiene una curva de aprendizaje comparativamente alta para principiantes, con un montón de ejemplos y no mucho contexto a su alrededor.

Muchos de los tutoriales que existen son compatibles con Phaser 2, y aunque el aprendizaje es transferible, el código no lo es. Además, los desarrolladores anunciaron recientemente que cambiarán el soporte a Phaser 4 (y TypeScript en lugar de ES6), lo cual no es genial si ha pasado tiempo trabajando en Phaser 3.

Si no es un programador profesional (no lo soy) y está al día con las clases de ES6 y las mejores prácticas de JavaScript (no lo era), es posible que se sienta rápidamente frustrado por la falta de agarre de Phaser y tener que configurar su propio IDE y flujo de trabajo (yo era).

Sin embargo, he descubierto que es un marco potente y ligero que hace muchas cosas de una forma mucho más ágil que otros motores de juegos. La funcionalidad de arrastrar y soltar para el juego de cartas ha sido relativamente sencilla, y la capacidad de separar los tipos de cartas en clases (algo así como las casas prefabricadas de Unity) ha compartimentado parte de la carga cognitiva que requiere este tipo de juego.

Si eres un desarrollador front-end, es posible que te guste o te sientas cómodo con la codificación rígida de las coordenadas de píxeles para todo, pero caramba, es un trabajo minucioso. Además, si no está al tanto de todo lo relacionado con JavaScript, lo más probable es que busque respuestas en círculos que no sean de Phaser y luego las aplique a su proyecto, lo cual tiene su propio beneficio, supongo.

Una nota aparte en caso de que no está claro: Phaser 3 hace tener un poco de documentación oficial y ejemplos, pero no tienen la comunidad o desbordamiento de pila que responde a una gran cantidad de otros motores de juego disfrutar. Si tiene un problema o no puede resolver algo, tendrá que encontrar su propia solución o publicar su pregunta en el servidor Phaser Discord, lo que ha sido útil en mi experiencia.

Conclusión

Dado todo lo anterior, el prototipo con el que me quedé y continúo iterando es el que construí con Phaser 3. Me doy cuenta de que esto puede ser anticlimático, ya que Phaser no es inherentemente "mejor" que otros marcos y motores en el desarrollo de juegos 2D (excepto, quizás, React, que no intenta ser un competidor en el espacio de los juegos digitales).

Sin embargo, Phaser parece manejar la gestión de los bucles de juego y arrastrar y soltar para Hacker Battles de manera más fluida, y para mis propósitos, eso es importante. También disfruto de que el uso de Phaser me exige invertir más en los ecosistemas y comunidades de JavaScript, pero estoy interesado en hacerlo de todos modos, así que se siente como una ventaja.

Si eres más del tipo "qué puedo usar para construir algo rápidamente y no te importa el contexto en el que se encuentra el motor", escribe YMMV.

TL; DR

Reaccionar: ideal para el desarrollo de aplicaciones para usuario No lo usaría para juegos, particularmente para arrastrar y soltar.

Unidad: puedes crear cualquier tipo de juego en 2D si estás dispuesto a luchar con el editor y las idiosincrasias 3D subyacentes. Gran apoyo de la comunidad y C # es increíble. El almacén de activos existe, pero puede que no sea útil para sus fines.

Godot: código abierto y compatible con GDScript, C #, incluso C ++ y Python si estás dispuesto a hacer mucho del trabajo pesado. Buenas implicaciones 2D, pero no tanto apoyo de la comunidad como algo como Unity. Además, mi experiencia fue con errores.

Construct 3: realmente fácil de usar, alta barrera de entrada debido al muro de pago de suscripción. Las secuencias de comandos visuales pueden irritarlo si está buscando usar o aprender código, aunque ahora hay algo de soporte para JavaScript.

Game Maker Studio 2: editor fácil de usar con buen apoyo de la comunidad. GML o secuencias de comandos visuales pueden no ser lo tuyo si vienes de otro lenguaje de programación más popular, pero bueno, cuando estés en Roma. Además, requiere el pago después de una prueba gratuita de 30 días.

Phaser 3: espere codificar todo y hacer muchas búsquedas para descubrir cómo hacer que las cosas funcionen. Me está funcionando para este juego y prototipo en particular, pero Phaser 4 está en camino, así que ahí está.

Espero que este artículo te sea de utilidad en tu propio proceso de búsqueda y discernimiento. ¡También me encantaría escuchar acerca de sus propias experiencias con cualquiera de estos marcos / motores u otros!

Si te gustó este artículo, considera revisar mis juegos y libros, suscribirte a mi canal de YouTube o unirte a Entromancy Discord.

MS Farzan, Ph.D. ha escrito y trabajado para compañías de videojuegos de alto perfil y sitios web editoriales como Electronic Arts, Perfect World Entertainment, Modus Games y MMORPG.com, y se ha desempeñado como Community Manager para juegos como Dungeons & Dragons Neverwinter y Mass Effect: Andromeda. . Es el director creativo y diseñador principal del juego Entromancy: A Cyberpunk Fantasy RPG y autor de The Nightpath Trilogy . Encuentra a MS Farzan en Twitter @sominator.