Lors du prototypage, comment puis-je explorer plus facilement le comportement du jeu?


49

Je construis moi-même des jeux indépendants, mais lorsque je mets un jeu nouvellement développé à un niveau où il est possible de jouer avec le comportement, je n’ai plus d’énergie, alors je me contente de raffinement plutôt que d’exploration. Avec des résultats affreux.

Raffinement vs exploration
(image du blog Intercom )

Par exemple, je trouve que les cycles d'itération pour modifier le comportement (c.-à-d. Relier et redémarrer une application C ++) sont si longs qu'ils tuent toute créativité. Je construis un outil pour faire face à cela.

Quels autres moyens existent pour explorer rapidement le comportement du jeu? Je m'intéresse aux méthodologies utilisées par les développeurs indépendants ainsi que par les grandes entreprises.


1
C'est une très belle photo. D'où cela vient-il?
Superbest

Je pense que ce que vous faites s'appelle officiellement "tests unitaires", surtout si vous souhaitez peaufiner une petite partie du jeu à la fois. Malheureusement, les jeux sont difficiles à tester, car il est difficile d’isoler les composants et d’automatiser le test lui-même (pour qu’il puisse décider du succès ou de l’échec). Lire sur les stratégies de tests unitaires peut vous donner des idées utiles, cependant.
Superbest

5
@Superbest: Je connais parfaitement les tests unitaires et vous ne pouvez pas comparer l'exploration du comportement à des tests unitaires. Lorsque vous étudiez un comportement, vous devez charger la plupart de vos moteurs de jeu, ainsi que les actifs correspondants. Les tests unitaires ne sont effectués que lorsque vous savez où vous allez. dans ce cas, personne ne le sait. C'est pourquoi c'est "exploration", pas "raffinement". Photo du blog Intercom .
Jonas Byström le

Lorsque vous testez en mode débogage, vous pouvez modifier votre code lorsque vous le mettez en pause (au moins dans Visual Studio). tant que vous ne modifiez pas beaucoup (en-têtes de fonctions, etc.), vous pouvez le charger dans votre partie en pause en peu de temps de compilation
Tobias B,

@TobiasB: dans la pratique, j'ai malheureusement trouvé cela inutile. D'autant que votre mécanisme de jeu est généralement réparti dans des scripts, des objets de jeu, des ressources, etc. déjà instanciés. Je ne suis même pas sûr que le logiciel gratuit Visual Express le prend en charge et ne l'utilise pas depuis 14 ans! :)
Jonas Byström

Réponses:


30

Comme vous l'avez noté, lorsque vous travaillez sur les mécanismes de jeu, la vitesse d'itération est essentielle. Plus le temps qui s'écoule entre penser à une modification et pouvoir tester avec cette modification est long, moins vous serez productif et plus vous deviendrez distrait. En conséquence, vous voulez vraiment gérer votre temps d’itération.

Pour moi, ma productivité commence vraiment à baisser lorsque le temps nécessaire pour tester un simple changement dépasse environ cinq secondes. Ainsi, lorsque vous essayez de perfectionner le jeu, l'un de vos objectifs doit être de déterminer "comment puis-je effectuer un changement puis jouer en utilisant ce changement en moins de cinq secondes". La façon dont vous le faites importe peu, tant que vous pouvez réduire le temps d'itération à peu près à ce niveau.

Beaucoup de gros moteurs modernes (Unity, Unreal, etc.) ont tendance à le faire en plaçant leur éditeur dans le moteur du jeu, afin que vous puissiez effectuer la plupart des modifications en direct, sans jamais redémarrer le jeu. Les moteurs / jeux plus petits concentrent généralement le travail dans l'autre sens; faites que le jeu soit compilé et lancé si rapidement que peu importe si vous devez le redémarrer à chaque changement; vous serez toujours là et vous testerez avant la fin de cette période de cinq secondes.

Dans mon projet actuel, il me faut environ dix secondes pour effectuer une petite recompilation, lier, lancer le jeu, puis atteindre le gameplay (la plupart de ces opérations génèrent une géométrie du monde restituable lors du chargement d'une partie sauvegardée). Et c'est beaucoup trop long. J'ai donc créé des modes de jeu "tests" distincts qui me permettent de tester différentes parties du jeu sans charger tous les actifs réels du jeu, ce qui me permet d'entrer et de sortir beaucoup, beaucoup plus rapidement; généralement en environ deux à trois secondes. Si je veux tester une interface utilisateur, je peux le faire sans charger le vrai jeu. Si je veux tester le rendu, j'ai un autre mode où je peux le tester, encore une fois sans charger tout le système de jeu.

J'ai vu d'autres personnes qui ont abordé le problème en plaçant la logique du jeu dans une DLL et en laissant l'exécutable du jeu déjà en mémoire recharger la DLL pendant l'exécution du jeu. Vous pouvez ainsi reconstruire la DLL et la recharger à l'intérieur d'un fichier. exécutable déjà chargé, vous n'avez donc pas besoin de recharger / reconstruire les ressources artistiques de votre jeu. Cela me semble une folie, mais je l’ai vu faire.

Il serait bien plus simple de spécifier les comportements de jeu et / ou la configuration dans des scripts ou des fichiers de données et de permettre à votre système de recharger ces fichiers, soit à la demande, soit simplement en les surveillant à la recherche de modifications, sans qu'il soit nécessaire de les fermer. le jeu vers le bas, reconnectez-le, puis redémarrez-le.

Il y a beaucoup d'approches. Choisissez ce qui fonctionne le mieux pour vous. Mais une des clés du raffinement réussi du mécanisme de jeu est une itération extrêmement rapide. Si vous n'avez pas cela, peu importe ce que vous faites d'autre.


3
Pourriez-vous élaborer sur vos modes de jeu "de test"? Est-ce que vous créez une tranche du jeu ici et là pour chaque partie chaque fois que vous voulez itérer dessus? De combien de temps avez-vous besoin pour configurer votre "tranche"? Que reste-t-il et comment? Avez-vous une sorte de "sauvegarde du jeu" et de "chargement du jeu" pour ce type de choses, ou est-ce moins générique?
Jonas Byström le

2
@ JonasByström Je ne sais pas pour lui, mais quand j'ai un bon contrôle sur mes états de jeu, je peux souvent avoir des versions alternatives "Debug" ( IF DEBUGdirectives de compilation littérales ) qui vont directement à mon état "test" (en sautant le menu du jeu). etc.), qui est juste une aire de jeu nue avec tous les actifs que je teste à l’époque. Donc, en gros, je compile un autre exécutable qui charge automatiquement un niveau très réduit (moins d’actifs à charger + aucun fouillis avec le menu du jeu à chaque fois).
Superbest

@ JonasByström Je divise mes jeux en "modes". C'est fondamentalement juste une grosse machine à états. Donc, je vais généralement avoir un mode "Titre", un mode "En jeu", un mode "Défilement des crédits", etc. Ce sont comme des jeux incorporés dans l'exécutable. Mes modes de "test" sont des choses comme "UITest", qui chargeront et dessineront simplement une interface utilisateur, sans charger aucun autre contenu de jeu. Ou "RenderTest", qui chargera et dessinera un objet particulier, sans rien charger d'autre.
Trevor Powell

@ JonasByström Lorsque j'ai besoin de créer un nouveau mode de test, l'écriture du code, qui configure la chose que je veux tester, ainsi que les dépendances éventuelles qu'il prendra, prend généralement quelques minutes. Ou bien, je peux souvent adapter un mode de test existant en quelques secondes (par exemple. Je modifierai généralement mon mode UITest existant pour charger un élément d'interface utilisateur différent, plutôt que d'en créer un nouveau). Peu importe le temps nécessaire à l'installation, cependant; Le fait est que, une fois installé, je peux effectuer des itérations à une vitesse absurdement rapide, ce qui me permet de rester productif pendant cette période d'itération.
Trevor Powell

1
@ JonasByström Il est également intéressant de noter que "acheter un ordinateur plus rapide" est également une solution tout à fait légale à la question "Comment puis-je obtenir le moins de temps possible d'itération"? Et souvent, cela peut être la solution la moins chère, par rapport à l'investissement de votre temps dans la mise en œuvre de bancs d'essai spéciaux. Réduire votre temps d'itération est un investissement qui nécessite beaucoup de temps, d'argent et d'efforts, mais qui rapporte beaucoup de dividendes par la suite.
Trevor Powell

20

Pour bien prototyper, réduisez le coût des idées de test.

Mon flux de travail est adapté aux petits jeux, mais j'ai trouvé ces choses utiles:

  • Technologie Prototype convivial que  je l' ai trouvé utile d'utiliser un langage de programmation dynamique et cadre, tels que Lua ( LÖVE est agréable pour 2D), JavaScript ou Lisp / Scheme où obtenir le programme pour faire quelque chose nécessite un minimum de frappes, même au prix de tout le reste. Une fois que vous savez ce que vous voulez et que vous souhaitez l'affiner, l'optimiser ou le transférer vers un autre moteur.
  • Contrôle de version  Conservez les prototypes dans un référentiel contrôlé par les révisions . Branche tôt, branche souvent. Cela vous permet d'essayer des choses sans craindre de perdre ou d'oublier quelque chose. ( Git a le modèle de branchement le moins cher.)
  • Automatisation de la construction  Assurez-vous de faire le moins possible pour que le logiciel fonctionne. À mon avis, même avoir à appuyer sur un bouton, c'est trop: j'ai généralement Makefileune make watchcible qui tourne inotifywaiten boucle, réagissant aux modifications de fichiers en compilant / exécutant automatiquement le jeu. Dans un langage interprété ou compilé par JIT , c'est instantané.

1
Lua ne semble pas supporter le code d'échange instantané. Est-ce que cela signifie que vous devez redémarrer votre jeu / prototype afin de tester vos modifications?
Jonas Byström le

6
Hotswapping Le code Lua est définitivement possible
Josh

1
@ JonasByström C'est possible, mais seulement dans le bon environnement. Si vous ne parvenez pas à en trouver un, écrivez-en un, le code source de Lua étant écrit en C, il est portable pour tout ce qui accepte les appels de fonction de style C. Mélangez-le avec OpenGL, SDL 2 ou une autre bibliothèque de wrapping graphics / harware et construisez vous-même un environnement de développement intégré.
Pharap


2
@ JonasByström: ... sauf à revenir sur la lune, apparemment. :(
Mason Wheeler

11

En tant que développeur spécialisé dans le prototypage, voici quelques conseils tirés de mon expérience.

  1. Utilisez un moteur qui vous permet d’apporter des modifications rapides. Cela inclut des choses comme "Pas d'attendre la compilation", mais aussi "Changer les choses au moment de l'exécution", "Facilité de débogage", "Disponibilité des ressources de test", etc. Personnellement, j'aime Unity3D, mais ce n'est pas le meilleur outil qui existe. Le meilleur outil dépend du jeu: par exemple, Unreal Engine compile le code plus lentement que Unity3D, mais il peut rapidement lancer plusieurs clients connectés. Pour un jeu en réseau, cela compense souvent les coûts de compilation. Pensez aussi à la familiarité. Si vous êtes un expert en C ++, même le meilleur moteur Javascript ne fera pas grand chose, et vice-versa. Ne passez pas votre temps à lutter avec des technologies inconnues (je veux dire, apprenez d’autres langages / structures, mais pas en même temps que la fabrication de prototypes importants).
  2. Apprenez à supprimer les fonctionnalités existantes sans merci. Vous accrocher à des choses que vous avez déjà mises en œuvre est un anathème à la réussite du prototypage, mais il est difficile d'abandonner votre travail.
  3. Si vous ne travaillez pas avec un concepteur de jeu, indiquez «porter le chapeau du programmeur» et «porter le chapeau du designer». Ajouter une nouvelle fonctionnalité de jeu semble très tentant, mais ne le faites pas lorsque vous êtes en tant que concepteur. Essayez plutôt de créer un gameplay amusant (de préférence plusieurs variantes) avec ce que vous avez; Faites une liste de fonctionnalités qui pourraient vous aider, puis implémentez-les.
  4. Le prototypage rapide implique un équilibre entre deux contraires. Vous voulez créer des choses aussi vite que possible, donc vous écrivez du mauvais code. Mais vous voulez changer des choses autant que possible, vous devez donc écrire du bon code! Apprenez à équilibrer ces deux. Désolé, je ne trouve aucun conseil concret sur la manière de le faire, mais au moins, soyez conscient de ce problème (-8

Regardez combien de temps votre prototypage nécessite. D'après mon expérience, vous voulez avoir une version jouable de n'importe quoi en deux jours maximum - à partir de zéro; et vous voulez tester une ou deux nouvelles fonctionnalités chaque jour. Si vous n'atteignez pas ces objectifs, cherchez des moyens d'être plus rapide.


Je pense que les fonctionnalités sont différentes de l'exploration du comportement. Je veux explorer "la sensation". Pour moi, les fonctionnalités ressemblent davantage à un rendu magnifique: non essentielles et non corrélées au plaisir du jeu. Minecraft, Candy Crush, Tetris et des jeux similaires prouvent que IMHO.
Jonas Byström le

@Jonas Byström Pour clarifier: par "caractéristiques", j'entends des modifications essentielles du gameplay. C'est-à-dire spécifiquement pas un beau rendu, mais quelque chose comme "ajouter un moyen de fabriquer des blocs" ou "ajouter des monstres qui attaquent et tuent le joueur" lors du prototypage d'un Minecraft.
Nevermind

1
L'importance de votre deuxième point, "laisser tomber les fonctionnalités", ne peut pas être surestimée. De nombreuses phases exploratoires échouent car elles n'ont pas dit "non" à cette fonctionnalité qui a pris 2 semaines pour être mise en œuvre.
Kostas

Une note sur le point 4. Je pense que la clé est de comprendre ce que vous allez avoir besoin de changer rapidement dans le code. Assurez-vous d'exposer les valeurs que vous savez que vous allez vouloir peaufiner. Laissez les autres sections du code enfouies si vous savez qu'elles n'affectent pas autant le jeu et exposez-les plus tard, au besoin. Vous devez résoudre ce problème rapidement, mais si vous pouvez essayer de concevoir votre architecture dès le départ, de sorte que la partie "conception du jeu" soit face à face et propre dans la mesure du possible, le reste peut être épouvantable.
sydan

1
@san, la triste vérité est que votre idée de ce que le code "fait face" est fausse. Je veux dire, il s'avère TOUJOURS que quelque chose que vous ne devriez jamais changer est en réalité une chose très dynamique. Lors du prototypage, vous feriez mieux de vous préparer à changer littéralement chaque aspect et à le faire rapidement.
Nevermind

5

On peut répartir le développement du jeu entre ces quatre phases:

  • prototypage
  • raffinement du gameplay
  • développement
  • raffinement de la performance

Je pense que l'exploration du gameplay se produit principalement lors de la phase de prototypage et voici quelques conseils que j'essaie de suivre:

  • Commencez à concevoir avec un prototype en papier. Une fois que vous avez une idée précise de ce que le jeu pourrait être, commencez à le coder afin que vous puissiez réellement ressentir les interactions. C'est peut-être inutile pour les jeux 3D mais personnellement cela m'a beaucoup aidé dans le passé.

  • Code sachant que vous allez jeter votre code une fois que vous avez terminé. Cela vous permettra d’être libéral quant au choix du moteur de jeu.

  • Les cycles d'itération rapides sont importants (comme d'autres l'ont souligné précédemment). Choisissez un moteur de jeu basé sur sa capacité à vous montrer rapidement ce que vous avez codé. Vous n'avez pas non plus à vous soucier de la performance ou de la fidélité graphique à ce stade.

  • Limitez votre portée. Si le jeu est en 2D (jeu de stratégie habituel, JRPG), prototype en 2D. Dans cette phase, vous ne vous souciez que des commentaires sur le gameplay .

  • Ne perdez pas de temps à polir ou à rechercher des actifs. Gribouillez quelque chose sur un papier, prenez-en une photo, coupez-la dans Photoshop, colorez-la et utilisez-la comme sprite. Allumez votre microphone et dites "pew pew". Assemblez deux cubes et une sphère et vous obtenez un robot. N'oubliez jamais que l'exploration des possibilités de jeu est votre première et unique priorité.

Après avoir choisi un prototype amusant, commencez à le peaufiner. Je ne pense pas qu'il y ait encore une raison de changer de technologie, sauf si un élément de jeu en a besoin.

Plus tard au cours de la phase de développement, vous garderez le prototype raffiné sous la main tout en développant un nouveau jeu beaucoup plus esthétique, avec un son bien meilleur et avec de meilleures sensations. Ici, vous devez choisir le moteur de jeu à utiliser.

En fin de compte, prenez ce que vous avez et accordez-le pour utiliser moins de ressources.

La plupart de ce que je décris ci-dessus est de notoriété publique, mais le mettre sur une liste, en compartimentant tout le processus de développement, m'aide à mettre chaque étape en perspective. J'espère que cela vous aide aussi.


1
Le papier et le "pew pew" sont d'excellents conseils; et oui - les listes m'aident aussi. "Identifie tes trois priorités. Jette les numéros deux et trois." :)
Jonas Byström

4

Je souscris à la réponse de Trevor Powell selon laquelle la vitesse d'itération est essentielle pour que vous restiez créatif au lieu de simplement polir. Le discours de Bret Victor intitulé "Inventer sur le principe" est une grande source d’inspiration pour moi . Malheureusement, il est difficile de trouver de vrais outils à ce niveau. J'ai essayé d'en construire un moi-même pour le développement Python, ce qui me permet d'exécuter mon code Python pendant que je le saisis. Cela s'appelle Live Coding in Python .


1
J'ai déjà vu la vidéo, mais je l'ai oubliée. Hm. Une interaction immédiate est vraiment un objectif à atteindre; Je vais essayer de suivre votre conseil. Bon travail sur l'intéressant plug-in Live Coding btw!
Jonas Byström le

2

J'ai construit un outil de prototypage appelé Trabant qui:

  • est 3D et mécanique de jeu SEULEMENT (pas d'interface utilisateur, pas de texte, rien);
  • nécessite très peu de code et aucun actif pour construire un prototype;
  • Les modèles 3D sont créés en code à l'aide d'art ASCII ;
  • permet des itérations inférieures à la seconde;
  • dispose d'un support de simulation de corps rigide;
  • fonctionne sur Windows, Mac, Linux et iOS;
  • utilise un langage généraliste bien connu, Python;
  • a un IDE pour Windows et iOS.

J'ai construit 30 prototypes de test pour vérifier ce qui précède.

Comme Trevor Powell l'a souligné, les itérations doivent durer moins de 5 secondes et je trouve celles-ci presque cinq fois plus bonnes.:)

Anko a mentionné qu'utiliser un langage dynamique est une bonne idée, j'ai choisi Python, car c'est l'un des plus utilisés . En ce qui concerne l'automatisation de la construction, tester dans Trabant est aussi rapide que d'appuyer sur F5 dans l'IDE (ou sur F6 pour le tester sur votre iPad). Etant donné qu'il n'y a pas d'étape de construction impliquée, cela ne devient pas plus instantané que cela.

Le code Throwaway était l'un des plats à emporter de Nevermind . Je suis tout à fait d'accord et Trabant l'applique.


1

Outre la vitesse d'itération de Trevor Powell, qui est vraiment importante, voici d'autres considérations utiles:

C'est comme un bon code ...

Il y a beaucoup de FI dedans.

Plus le concept est solide, moins vous avez besoin de jouer. Si vous savez ce que vous tentez de faire, le prototypage devient ce qu'il faut mettre et comment arranger les choses par rapport au pilier central (votre chose principale).

Si vous débutez comme beaucoup d'autres - vous ne savez pas vraiment ce que vous voulez faire, vous vous dirigez dans une direction et explorez beaucoup de choses à la manière de l'image que vous avez montrée.

Dans les deux cas, l’engagement dans une technologie n’est pas pertinent si vous pouvez simuler ce que vous recherchez sans trop de profondeur - protégez-le sur ce que vous voulez / pouvez.

Ne perdez pas une seconde supplémentaire en ressources. Téléchargez tout sur Internet. Propriétaire ou non. Vous cherchez à avoir une idée de votre concept au travail - à moins que le graphisme ne soit votre principale caractéristique, personne ne vous poursuivra pour avoir expérimenté les sons, les textures et tout le reste, vous ne le mettez pas pour le moment dans le magasin. À moins que vous ne soyez déjà financé - convaincre les gens que le concept en vaut la peine, c'est ce qui vous donnera l'argent pour obtenir les ressources que vous souhaitez. J'ai vu des personnes de studio de jeu présenter des concepts de jeu avec des versions modifiées de jeux propriétaires sur lesquels ils n'ont aucun droit.

C'est comme si vous construisiez un modèle réduit. Bien que ce soit génial d’avoir une réplique miniaturisée de la vie de ce que vous voulez. Parfois, il suffit de le découper dans des magazines, de fabriquer à la main et de coller les morceaux ensemble. Tous ceux qui ont un peu d'imagination ne vont pas présumer que vous construirez le gratte-ciel avec le même carton que celui avec lequel vous avez montré la maquette. Et dans les industries créatives, il est préférable de travailler avec des gens avec une certaine imagination. S'ils ne peuvent pas ignorer certains problèmes de rédaction pour voir le potentiel de tout un concept, ils apprécieront rarement, voire jamais, un produit. Aucune appréciation ne signifie qu'ils sont moins disposés à s'engager et c'est une spirale descendante. C'est la différence entre définir l'attitude de votre enfant pour conquérir le monde et lui dire à la place: "Tu ne peux même pas attacher tes chaussures correctement, petit dipshit,

Quoi que vous fassiez, souvenez-vous toujours que seule une attitude suffit largement à tout gâcher, quel que soit son potentiel technologique ou économique.

J'ai déjà créé un prototype de jeu utilisant exclusivement des images gif et leur donnant un petit quelque chose à voir avec javascript. Ce n'est pas éblouissant mais il a servi à montrer ce que je voulais montrer. Peu importe si par la suite vous le développez exclusivement pour Xbox.

Si votre idée est plus complexe qu'un simple prototype, vous devrez alors mettre la recherche sur la technologie que vous utiliserez, car le prototype sera l'échafaudage du dernier élément (simplement parce que beaucoup est investi dans et il ne peut pas être jeté à la légère) - si vous le faites approuver de toute évidence.


Le prototypage n'est requis que si vous construisez quelque chose de nouveau, c'est une donnée. Le manque d’outils, c’est comme le manque de stylo et de papier - et bien sûr, vous pouvez tirer dans le sable, mais c’est inefficace. J'ai construit Trabant pour éviter d'avoir à utiliser GIF + JS ou Scratch .
Jonas Byström
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.