J'ai essayé de créer le même prototype de jeu 2D dans React, Unity, Godot, Construct, Game Maker et Phaser. Voici ce que j'ai trouvé.

Je suis un développeur de jeux de table. Lors de la conception d'un nouveau jeu de cartes, j'ai décidé de construire un prototype numérique pour m'aider à exécuter des simulations et partager facilement une preuve de concept avec des collaborateurs.

J'ai quelques connaissances en JavaScript et C #, et j'expose comme beaucoup le font: en passant un temps excessif dans les threads "quel framework dois-je utiliser" et en lisant la documentation sans rien faire.

Flash avant de plusieurs mois, et j'ai maintenant passé plus de temps à travailler (et à lutter avec) React, Unity, Godot, Construct 3, Game Maker Studio 2 et Phaser 3, dans le but de comprendre ce qui les motive.

Certes, je pense que j'ai passé beaucoup plus de temps dans chacun d'eux que nécessaire pour faire mon petit jeu, et j'aurais probablement pu me contenter du premier et me frayer un chemin à travers le prototype. J'espère que les informations ci-dessous seront utiles à tous ceux qui recherchent un moteur ou un cadre.

Quelques mises en garde: je n'essaye pas de vendre un moteur ou un framework sur les autres, et je ne suggère pas non plus que l'un ou l'un de ces frameworks fonctionnera mieux pour votre jeu qu'un autre. Je ne compare pas non plus les prix, les fonctionnalités back-end ou le déploiement de la plateforme. Ainsi, en fonction de vos besoins, les informations ci-dessous peuvent avoir une valeur différente pour vous.

De plus, cette expérience est basée sur le développement d'un jeu de cartes 2D, je ne parlerai donc pas des moteurs 3D, de la physique, etc.

Vous pouvez également passer au bas pour le TL; DR.

Le Prototype

Mon jeu, Entromancy: Hacker Battles , est un jeu de cartes cyberpunk compétitif avec une mécanique TCG-light. Vous pouvez en savoir plus sur notre site Web ou voir comment il est censé être lu dans cette vidéo. Mais il suffit de dire qu'en tant que jeu de cartes, il nécessite un cadre numérique potentiel pour prendre en charge des éléments de base tels que la gestion de l'état, l'interface utilisateur, l'UX par glisser-déposer et les hooks d'arrière-plan pour la mise en œuvre du multijoueur.

Compte tenu de ces exigences, j'ai exploré les frameworks et moteurs suivants pour voir lequel serait le plus approprié pour faire mon jeu ... au lieu de faire réellement le jeu (je suis heureux de dire que maintenant que j'ai choisi un framework, Je fais beaucoup plus de progrès).

Vous pouvez accéder à une version jouable ici, et bien que le jeu soit plus avancé que ne le suggère le prototype en direct, cette version est assez stable (au moins dans Chrome).

Réagir

Ayant déjà construit un prototype de générateur de personnage dans React pour un RPG de table que j'ai conçu, j'ai pensé qu'une étape naturelle serait de donner au cadre une rotation pour le jeu de cartes. J'ai trouvé la gestion de l' Etat d'être un jeu d' enfant (c'est ce que React fait , après tout), alors que la mise en œuvre simple , la fonctionnalité glisser-déposer pour les cartes avéré être un cauchemar.

Il existe des bibliothèques qui peuvent aider avec le glisser-déposer de base (par exemple, React DnD), mais j'ai trouvé qu'avec un jeu de cartes, j'avais besoin d'une solution plus élégante pour les dropzones, car Hacker Battles est très spécifique sur les cartes pouvant être joué où et quand.

Cette expérience m'a amené à découvrir boardgame.io, qui peut fonctionner en tandem avec React. Mais cela m'a finalement obligé à apprendre un autre cadre en plus d'un cadre existant, ce qui était loin d'être idéal pour mes besoins.

Unité

Par intérêt général, j'avais passé beaucoup de temps dans Unity à faire des tutoriels et à apprendre à utiliser l'éditeur avant de tenter de refaire le prototype de jeu de cartes avec. Le magasin d'actifs est une excellente ressource, et il y a tellement de documentation, officielle et non officielle, que j'étais convaincu de pouvoir trouver une réponse à tout problème que je pourrais rencontrer.

Jusqu'à présent, mon expérience avec Unity a été mitigée. J'aime vraiment travailler en C #, et tout ce qui est lié au code a été une expérience relativement simple. Cependant, Unity est très spécifique sur son implémentation et peut parfois sembler contre-intuitif.

L'éditeur, en revanche, est un ours avec qui travailler. Pour exploiter tout le potentiel de Unity, vous devez passer un bon bout de temps à lutter avec l'interface utilisateur pour comprendre où tout se trouve et comment l'utiliser. Il est également désespérément en retard avec le développement de jeux 2D, essayant clairement d'aplatir un moteur principalement 3D dans un plan 2D, avec des résultats mitigés.

Pour être honnête, j'aime beaucoup travailler dans l'éditeur Unity, aussi maladroit soit-il. Mais si vous recherchez un moteur de jeu 2D, votre qualité de vie sera bien meilleure ailleurs (regardez une vidéo sur le système d'animation d'Unity ou atteignez la perfection des pixels et vous verrez ce que je veux dire).

En fin de compte, la gestion par Unity de l'espace 2D est un peu plus complexe que ce dont j'ai besoin pour mon prototype, mais j'y reviendrai pour d'autres types de jeux.

Aussi, une barre latérale qui pourrait être utile à certains: j'étais au départ extrêmement enthousiasmé par le magasin d'actifs, avec l'idée que je pourrais acheter un modèle de jeu de cartes qui rendrait le processus de développement beaucoup plus facile pour moi. Ça n'a pas marché. La plupart d'entre eux étaient MTG / Hearthstone / etc. des clones qui nécessiteraient autant de temps de développement de ma part pour les restructurer pour mon jeu de cartes que pour recommencer à zéro.

Godot

Ma première pensée en rencontrant Godot a été: "un moteur de jeu open source prenant en charge C #? Inscrivez-moi!" Ensuite, je l'ai téléchargé, j'ai travaillé sur quelques didacticiels de base et je l'ai fait planter lors de la construction. Hurm.

Plusieurs recherches Google, réinstallations et cheveux tirés plus tard, j'ai compris que cela avait quelque chose à voir avec ma version de VS Build (je pense?), Ce qui m'a conduit dans un terrier de lapin séparé. Je savais par expérience que d'autres moteurs - le chef d'Unity parmi eux - pouvaient causer des problèmes de rupture complètement en dehors de votre propre code, mais c'était un obstacle ennuyeux qui a probablement coloré le reste de mon expérience avec Godot.

En ce qui concerne l'éditeur, j'ai bien aimé l'implémentation basée sur les nœuds de Godot, que j'ai trouvée en fait contre-intuitive provenant des préfabriqués d'Unity, mais à laquelle j'ai finalement été réchauffé. J'irais même jusqu'à dire que sa fonctionnalité 2D est meilleure que celle de Unity, mais il manque la communauté, le magasin d'actifs (voir la barre latérale ci-dessus), et surtout, la documentation dont Unity dispose. Si vous avez l'intention de travailler en C # avec Godot, par exemple, soyez prêt à rechercher des réponses dans le GDScript personnalisé du moteur, puis à les traduire en C #.

J'ai cependant entendu parler de personnes qui ont connu un grand succès avec Godot en utilisant GDScript, donc si vous êtes prêt à investir du temps pour l'apprendre, vous pourriez profiter de ce que Godot a à offrir.

Construire 3

Dans les mises en garde que j'ai énumérées ci-dessus, j'ai mentionné que je n'incluais pas les prix comme point de discussion. Pourtant, je sens que je dois en parler avec Construct 3, car cela s'est avéré avoir un impact sur mon expérience.

Contrairement aux autres moteurs de jeu répertoriés ici, qui sont, pour la plupart, gratuits à utiliser (Game Maker Studio 2 a un essai gratuit de 30 jours), la grande majorité des fonctionnalités de Construct se trouve derrière un mur payant et des frais d'abonnement à cette. Pouah.

Je vraiment, vraiment comme la coupe de la flèche de Construct pour de simples jeux 2D. L'éditeur ressemble un peu à une mise à niveau de MS Paint, mais il gère très bien la gestion des sprites et des objets, et est tout simplement facile à utiliser. Je n'aime pas qu'il utilise un style de "script visuel", mais ils ont récemment ajouté la fonctionnalité d'écrire du vieux JavaScript et cela semble plus ou moins fonctionner.

J'ai pu créer une architecture très rudimentaire pour le prototype en peu de temps avant de fermer la démo de Construct 3 (qui fonctionne dans un navigateur) ... puis de tout réessayer plus tard avec une nouvelle démo. J'ai l'impression que, au moins pour ce jeu de cartes, je pourrais faire beaucoup avec Construct 3, mais je ne suis tout simplement pas prêt à payer 99 $ / an (ou plus, en tant qu'entreprise) pour un prototype.

Game Maker Studio 2

YoYo Games a clairement fait beaucoup de travail pour rendre Game Maker Studio 2 accessible et facilement navigable, et cela se voit. De tous les moteurs que j'ai utilisés pour ce projet, j'aime le plus l'éditeur GMS. Pour un petit projet, il est facile de s'y retrouver et de vaquer à ses occupations. Je soupçonne, cependant, qu'un projet plus vaste pourrait devenir rapidement incontrôlable.

Cela pourrait être influencé par le langage propriétaire de Game Maker Studio, GML (bien que GMS 2 prenne en charge le script visuel, que je n'ai pas utilisé). Cela fonctionne, mais si vous y arrivez à partir d'un autre langage POO (ou, vraiment, de tout autre langage largement utilisé), vous pourriez vous gratter la tête à l'implémentation ou à trouver comment faire certaines choses. Si vous êtes un débutant ou êtes prêt à passer du temps à comprendre comment GMS veut que vous utilisiez GML, tout ira probablement bien.

J'ai connu une certaine bizarrerie avec la fonctionnalité glisser-déposer de Game Maker Studio - à savoir, la détection du pointeur de la souris lors du glissement est un peu bancale et nécessite un échafaudage pour fonctionner correctement.

Je pense - et c'est totalement une préférence personnelle et une paresse de ma part - que si GMS offrait la possibilité d'utiliser un autre langage de programmation non propriétaire, je passerais le temps à faire plus de dégâts ici. Je suis tout à fait favorable à l'amélioration de plusieurs compétences tout en travaillant, alors que passer le temps de devenir un expert de l'éditeur GMS et de GML sans pouvoir facilement appliquer ces connaissances ailleurs ne semble pas utile.

Pourtant, c'est un éditeur 2D assez pratique, et bien que le support de la communauté puisse ne pas être à la hauteur de celui de Unity, il reste assez bon. Sachez également qu'une fois votre essai gratuit terminé, vous devrez payer pour continuer à utiliser Game Maker Studio 2.

Phaser 3

Phaser est un framework de jeu JavaScript léger et open source. Il existe des IDE Phaser, mais si vous êtes du genre à vouloir travailler principalement dans le code, vous pouvez vous retrouver ici, en utilisant Atom, Sublime ou votre éditeur préféré.

Phaser 2 était et est largement utilisé et bien documenté avec une tonne de tutoriels sur lesquels s'appuyer. Phaser 3 est le contraire. Il a une courbe d'apprentissage relativement élevée pour les débutants, avec un tas d'exemples et pas beaucoup de contexte autour d'eux.

De nombreux tutoriels prennent en charge Phaser 2, et bien que l'apprentissage soit transférable, le code ne l'est pas. De plus, les développeurs ont récemment annoncé qu'ils déplaceraient la prise en charge vers Phaser 4 (et TypeScript plutôt que ES6), ce qui n'est pas génial si vous avez passé du temps à travailler dans Phaser 3.

Si vous n'êtes pas un programmeur professionnel (je ne le suis pas) et que vous êtes au courant des classes ES6 et des meilleures pratiques JavaScript (je ne l'étais pas), vous pourriez être rapidement frustré par le manque de prise en main de Phaser et par le fait de devoir configurer votre propre IDE et flux de travail (j'étais).

Cependant, j'ai trouvé que c'était un cadre puissant et léger qui fait beaucoup de choses de manière beaucoup plus simple que les autres moteurs de jeu. La fonctionnalité de glisser-déposer pour le jeu de cartes a été un jeu d'enfant, et la possibilité de séparer les types de cartes en classes (un peu comme les préfabriqués d'Unity) a compartimenté une partie de la charge cognitive requise par ce type de jeu.

Si vous êtes un développeur front-end, vous aimerez peut-être ou serez à l'aise avec le codage en dur des coordonnées de pixel pour tout, mais c'est un travail minutieux. De plus, si vous n'êtes pas au courant de tout ce qui concerne JavaScript, vous rechercherez probablement des réponses dans des cercles non-Phaser, puis vous les appliquerez à votre projet, ce qui a son propre avantage, je suppose.

Une autre note au cas où ce ne serait pas clair: Phaser 3 a pas mal de documentation officielle et d'exemples, mais il n'a pas la communauté ou Stack Overflow de réponses que beaucoup d'autres moteurs de jeu apprécient. Si vous rencontrez un problème ou que vous ne parvenez pas à comprendre quelque chose, vous devrez trouver votre propre solution ou publier votre question sur le serveur Phaser Discord, ce qui a été utile selon mon expérience.

Conclusion

Compte tenu de tout ce qui précède, le prototype sur lequel je suis resté fidèle et sur lequel je continue d'itérer est celui que j'ai construit avec Phaser 3. Je me rends compte que cela peut être anti-climactique, car Phaser n'est pas intrinsèquement «meilleur» que d'autres frameworks et moteurs de développement de jeux 2D (à l'exception peut-être de React, qui n'essaye pas d'être un concurrent dans l'espace du jeu numérique).

Cependant, Phaser semble gérer plus facilement la gestion du glisser-déposer et de la boucle de jeu pour les batailles de hackers , et pour mes besoins, c'est important. J'apprécie également le fait que l'utilisation de Phaser m'oblige à investir davantage dans le ou les écosystèmes et les communautés JavaScript, mais je suis intéressé à le faire de toute façon, donc cela ressemble à un bonus.

Si vous êtes plutôt du type "que puis-je utiliser pour construire quelque chose rapidement sans vous soucier du contexte dans lequel se trouve le moteur", YMMV.

TL; DR

React: idéal pour le développement front-end. Je ne l'utiliserais pas pour les jeux, en particulier le glisser-déposer.

Unity: vous pouvez créer n'importe quel type de jeu 2D si vous êtes prêt à vous battre avec l'éditeur et les particularités 3D sous-jacentes. Excellent support de la communauté, et C # est génial. Le magasin de ressources existe, mais peut ne pas être utile à vos fins.

Godot: open source et prend en charge GDScript, C #, même C ++ et Python si vous êtes prêt à faire le gros du travail. Bonnes implications 2D mais pas autant de soutien communautaire que quelque chose comme Unity. De plus, mon expérience a été buggy.

Construct 3: vraiment facile à utiliser, barrière à l'entrée élevée en raison du paywall d'abonnement. Les scripts visuels peuvent vous énerver si vous cherchez à utiliser ou à apprendre du code, bien qu'il existe maintenant un support JavaScript.

Game Maker Studio 2: éditeur convivial avec un bon support communautaire. GML ou script visuel n'est peut-être pas votre tasse de thé si vous venez d'un autre langage de programmation plus populaire, mais bon, à Rome. Exige également un paiement après un essai gratuit de 30 jours.

Phaser 3: attendez - vous à tout coder et faites beaucoup de recherches pour comprendre comment faire fonctionner les choses. Cela fonctionne pour moi pour ce jeu et ce prototype en particulier, mais Phaser 4 est en route, donc il y a ça.

J'espère que cet article vous sera utile dans votre propre processus de recherche et de discernement. J'aimerais aussi entendre parler de votre (vos) propre (s) expérience (s) avec l'un de ces frameworks / moteurs ou autres!

Si vous avez aimé cet article, pensez à consulter mes jeux et mes livres, à vous abonner à ma chaîne YouTube ou à rejoindre le Discord Entromancy .

MS Farzan, Ph.D. a écrit et travaillé pour des sociétés de jeux vidéo de haut niveau et des sites éditoriaux tels que Electronic Arts, Perfect World Entertainment, Modus Games et MMORPG.com, et a servi en tant que Community Manager pour des jeux comme Dungeons & Dragons Neverwinter et Mass Effect: Andromeda . Il est le directeur créatif et le concepteur principal du jeu Entromancy: A Cyberpunk Fantasy RPG et auteur de The Nightpath Trilogy . Retrouvez MS Farzan sur Twitter @sominator.