Tisseur d'écho Construire un metroidbrainia à boucle temporelle dans Unity 6
Fergus Baird - Unity Technologies
Senior Content Marketing Manager
Cette page a été traduite automatiquement pour faciliter votre expérience. Nous ne pouvons pas garantir l'exactitude ou la fiabilité du contenu traduit. Si vous avez des doutes quant à la qualité de cette traduction, reportez-vous à la version anglaise de la page web.
Echo Weaver, le metroidbrainia attendu de Moonlight Kids et Akupara Games, est lancé aujourd'hui sur PC et consoles. Nous avons interviewé le concepteur de jeux Chris Sumsky et le programmeur Ankit Trivedi pour discuter de la conception basée sur la connaissance, de l'architecture de réinitialisation de la boucle et des leçons qu'ils donneraient aux autres petites équipes réalisant des jeux avec Unity.
Lorsque le studio indépendant de trois personnes Moonlight Kids a commencé à travailler sur Echo Weaver, ils ont pensé avoir trouvé une faille dans l'un des systèmes les plus notoires du développement de jeux : l'état de sauvegarde.
« Si quelqu'un perd sa sauvegarde, vous devenez son ennemi numéro un », dit Chris. L'équipe avait eu du mal avec des erreurs d'état de sauvegarde lors de ses débuts, le créature-collecteur The Wild at Heart, donc la prémisse de la boucle temporelle pour Echo Weaver semblait un rêve devenu réalité : On était comme, pas de sauvetage ! Voyage dans le temps ! Tout se réinitialise !
Bien sûr, les choses dans le développement de jeux sont rarement aussi simples. Echo Weaver diffuse son monde interconnecté sans écrans de chargement, ce qui signifie que le jeu doit constamment charger et décharger des morceaux de la carte au fur et à mesure que le joueur navigue dans le monde. Ceci crée des situations comme : Le joueur a-t-il cassé le mur de raccourci dans cette boucle ? Ont-ils parlé à cet PNJ ? Le monde de Echo Weaver doit maintenir un certain niveau de persistance, au moins jusqu'à ce que le joueur n'ait plus de temps et que la boucle redémarre. « Alors, il s'est avéré que nous devions tout de toute façon sauvegarder », dit Chris. « Mais c'est moins préjudiciable quand quelque chose tourne mal, parce que le joueur peut toujours réinitialiser la boucle. »

Un jeu de détective de parkour spatial
Dans Echo Weaver, il n'y a pas de portes de capacité. Le monde est entièrement ouvert dès la première minute de jeu, mais c'est au joueur de trouver comment l'explorer entièrement. « Notre pitch interne était "détective de parkour spatial" », dit Ankit.
« Imagine que tu doives faire un jeu où rien ne persiste », dit Chris. Chaque sentiment de progression dont le joueur a besoin est déjà là, il est juste enfoui sous des couches de secrets. C'est la grande chose bizarre que nous faisons avec Echo Weaver. C'est à la fois la chose la plus cool pour moi et le plus grand défi, parce que quelqu'un peut tomber sur n'importe quelle capacité à tout moment.
Durant les premières phases de développement, l'équipe a positionné le projet comme une réaction délibérée à The Wild at Heart. À l'époque, ça ne s'était pas bien vendu – heureusement cela a changé plus tard – et nous essayions donc de faire tout ce qui était contraire à ce projet. « Nous pensions faire quelque chose d'un peu plus sombre, d'un peu plus dur », dit Chris. « Bien sûr, cela signifiait que nous allions à contre-courant de ce que nous faisions de mieux – et nous avons vite vu notre erreur ! »

Echo Weaver | Moonlight Kids | Akupara Games
Beaucoup des éléments hérités de Echo Weaver de The Wild at Heart sont fondamentaux pour l'identité de Moonlight Kids en tant que studio, du style dessiné à la main de Justin Baldwin, cofondateur et directeur créatif (« jusqu'aux mêmes pinceaux et palettes ») aux grands espaces interconnectés remplis de secrets, et à un engagement envers une narration nuancée dans des genres où ce n'est pas souvent le point central.
Sur le plan technique, la bibliothèque d'outils internes de l'équipe a également fait le saut de The Wild at Heart, y compris le système de dialogue, la couche d'interface FMOD, le contrôleur et le code d'icône d'entrée dynamique, et le tremblement d'écran.

Echo Weaver | Moonlight Kids | Akupara Games
Principes de conception fondamentaux : Le Tisserand se souvient
Sans portes de capacité et un monde qui se réinitialise à chaque boucle, Moonlight Kids devait établir des règles pour ce qui persiste entre les parties. Ils sont arrivés à une solution narrative qui ne briserait pas l'immersion : Le personnage joueur, le Tisserand, conserve ses souvenirs à travers les boucles. « Tout ce qu'ils se rappelleraient dans leur propre cerveau, nous avons le droit de l'amener dans la boucle. » « Si le Tisserand le voit, le joueur doit le voir », explique Chris. « Ça ne casse pas la règle de la métroidbrainia. »
Cette décision informe l'intégralité du jeu, de l'écran de progression qui suit les connaissances que le joueur a débloquées à la présentation du niveau. Lorsqu'une zone cachée est découverte, l'œuvre au premier plan s'estompe. Pendant les tests de jeu, cela n'était pas persistant entre les boucles, mais l'équipe a constaté que les joueurs oubliaient les raccourcis qu'ils avaient découverts, ils ont donc fait une concession et ont estompé en permanence le premier plan dans les zones que les joueurs revisitaient le plus souvent.

Echo Weaver | Moonlight Kids | Unity
Conception de niveau sans raccourcis permanents
Choisir de bloquer la progression en utilisant la connaissance du joueur plutôt que des améliorations spécifiques retire un outil important de la boîte à outils du concepteur de niveau standard. Les métronautes s'appuient généralement sur des murs à sens unique et des raccourcis permanents – brisez un mur et ce chemin est ouvert pour le reste du jeu. « Dans un jeu en boucle temporelle comme Echo Weaver, quand tu brises un mur et que tu réinitialises la boucle, ce mur est juste de retour », dit Chris. « Ce n'était pas nécessairement dans ma boîte à outils. »
La solution de l'équipe pour ce problème fonctionne à deux échelles. Dans une seule boucle – qui peut durer plusieurs minutes en fonction du temps que le joueur a collecté – Chris a pu réaliser des astuces de conception métridovania traditionnelles, car tout ce qui est contenu dans une boucle peut porter ses fruits dans cette même boucle. L'équipe a conçu chacune des branches et des zones du jeu en gardant cette contrainte à l'esprit.
Pour des raccourcis plus grands et plus complexes – « Pensez au Sanctuaire Firelink dans Dark Souls, » dit Ankit – la seule vraie option est la dissimulation. Un passage peut être dissimulé derrière l'art au premier plan à une extrémité et positionné au premier plan à l'autre, créant un secret caché à la vue de tous. « Des jeux comme Tunic font cela vraiment bien avec la perspective », ajoute-t-il.

Echo Weaver | Moonlight Kids | Akupara Games
Gérer le temps du joueur
L'horloge de Echo Weaver est son système le plus proéminent et est visible par le joueur en tout temps. Chaque boucle commence par 1 minute de temps sur l'horloge. Les joueurs peuvent chercher des cristaux temporels pour l'étendre, ou ils peuvent sacrifier des cristaux pour guérir ; trouver le bon équilibre ici est crucial pour réussir.
Dans les premières versions du jeu, le chronomètre diminuait seconde par seconde, mais les testeurs ont détesté cela. « Cela a créé beaucoup de stress », dit Chris. Un jour, on s'est dit : et si on enlevait juste l'horloge ? Vous n'avez pas vraiment besoin de secondes – tout ce dont vous avez besoin, ce sont les minutes.
Le HUD final est une rangée de tranches de temps, chacune représentant une minute – dans le jeu, elles sont appelées « cloches » parce que les PNJ disant des choses comme « Reviens à la minute 8 » ont brisé l'immersion. Presque tout dans le monde est soigneusement synchronisé autour de ces rythmes d'une minute. Les testeurs ont répondu positivement à ce nouveau système et ont bientôt inventé des « Sequences de démarrage » – des itinéraires d'ouverture fortement optimisés qui économisent beaucoup de temps dès les premières secondes d'une boucle.

Echo Weaver | Moonlight Kids | Akupara Games
Comment fonctionne la boucle temporelle
Alors que se passe-t-il lorsqu'une boucle temporelle se réinitialise dans Echo Weaver ? L'architecture d'Ankit divise le monde du jeu en morceaux, chacun étiqueté avec un script de morceau, avec un processus de construction personnalisé qui supprime le contenu coûteux à l'avance.
La couche lourde et immuable – toute la géométrie du monde et les marqueurs de transition – est intégrée dans les scènes et reste chargée en permanence. Une scène légère « essentiels » contient l'état volatile : le gestionnaire de jeu, le joueur et les données spécifiques à l'exécution. Lors d'une réinitialisation, le jeu décharge les morceaux actifs, jette entièrement la scène essentielle et la recharge, ne faisant remonter que les morceaux nécessaires pour la séquence d'ouverture de la boucle.
«C'est une grande façon dont nous atténuons ce qui persiste et ce qui ne devrait pas – nous le jetons et nous le refaisons», dit Ankit. C'est une scène tellement légère de toute façon que la gâcher et la refaire n'est pas une grande préoccupation.
L'état spécifique à l'exécution réside dans un dictionnaire en mémoire de clés de chaînes de caractères ; effacer ce dictionnaire fait partie de la réinitialisation. Tout ce qui doit survivre à travers les boucles – le nombre de boucles, les capacités qu'ils ont vues, les personnages avec qui ils ont parlé – est sérialisé sur disque. Chaque objet vérifie sa propre clé lorsque son bloc arrive en flux, lisant souvent juste un booléen ou un entier.
L'approche n'a pas été complètement exempte de bugs. Ankit a découvert que les portes de transition persistantes ne réinitialisaient pas complètement leur état d'interface utilisateur entre les boucles, alors il a simplement cessé de les persister. Maintenant, le composant interactif de chaque porte est un clone qui est réinstancié à chaque réinitialisation. « Pour peut-être 20 objets, ça n'a pas d'importance – ça n'a pas d'impact sur les performances », explique-t-il.
Les objets transportables comme les clés posaient un problème plus subtil : un objet qui vit dans un bloc peut être déplacé n'importe où dans le monde du jeu, et la propriété au niveau du bloc signifiait que ces objets disparaissaient des inventaires des joueurs ou étaient dupliqués. Pour corriger cela, l'équipe a déplacé les éléments vers la couche de scène persistante.

Les actifs d'environnement en couches d'Echo Weaver dans l'éditeur
Optimiser un monde détaillé et dessiné à la main
Comme The Wild at Heart, Echo Weaver est dense en art dessiné à la main sur mesure – ce qui, bien que visuellement époustouflant, peut être coûteux à charger et à rendre. L'équipe a mis en œuvre plusieurs correctifs pour maximiser les performances.
Compression d'actifs
La solution à leur premier grand obstacle de performance fut anticlimatique. « Aucun de nos atlas n'avait de compression », rit Ankit. L'activation de compression a ramené tout en mémoire à environ 1 Go.

Un aperçu des animations de Weaver dans l'éditeur Unity
Chargement de la scène
Le chargement du jeu a présenté un problème plus difficile. L'instanciation se déroule sur le thread principal de manière synchrone, les assets décoratifs étant donc supprimés des chunks au moment de la construction (avec ManualOverrides pour la taille, la rotation et les paramètres de sprite préservés) et réinstanciés de manière asynchrone, par lots de quelques objets par image. Combiné à un système de voisinage qui maintient toujours les blocs adjacents chargés, le pop-in reste invisible.
Mise en lot
Parce que les œuvres d'art dessinées à la main par Justin évitaient les motifs répétitifs, les opportunités de regroupement étaient rares, donc Ankit a écrit un outil qui aplatit des groupes de sprites en une seule image (et un seul appel de dessin). Par exemple, le ciel dans l'un des biomes d'Echo Weaver est construit à partir de dizaines de plateformes presque identiques ; en utilisant l'outil, ils l'ont réduit à deux sprites composites ainsi qu'à une poignée d'accents uniques.
Éclairage
La configuration d'éclairage initiale de Echo Weaver était coûteuse. Les sprites transportaient à l'origine jusqu'à quatre types de lumière différents chacun (variantes d'arrière-plan, de joueur, d'objet et de sol), et à un moment donné, 16 textures d'éclairage distinctes étaient rendues simultanément. Consolider six couches légères en trois coupes qui réduisent considérablement, « et je ne pense pas que les visuels en aient souffert », dit Ankit.
Effets aquatiques
L'eau est venue du Unity Asset Store : Kit d'eau Game2D, fonctionnant sur le Universal Render Pipeline. « Très flexible, produit de très bons résultats », dit Ankit – mais chaque plan d'eau rend la caméra, et le coût augmente avec le nombre de groupes de couches réfractant sous la surface. L'équipe a consolidé les couches sous-marines, et l'équipe de portage interne d'Akupara Games est allée plus loin pour le matériel d'entrée de gamme, en séparant l'effet de perspective d'entrée de surface factice du réglage de réfraction du plugin afin que les appareils plus faibles conservent l'apparence sans le redessin.

Echo Weaver | Moonlight Kids | Akupara Games
Débogage
Le Frame Debugger de Unity a joué un rôle central dans une grande partie de ce travail d'optimisation, permettant à Ankit de parcourir l'appel de dessin image par image et de voir exactement où le regroupement échouait – et pourquoi. De là, le travail consistait à consolider : unifier les matériaux, convertir les sprites égarés et revérifier jusqu'à ce que autant que possible du cadre soit regroupé. « On peut encore voir que le regroupement casse par ici et par là », dit-il, « Mais c'est beaucoup moins que ce que c'était. » Le conseil d'Ankit aux autres équipes est simple : « commencez à utiliser le Frame Debugger sans modération, tout de suite ! »

Echo Weaver | Moonlight Kids | Akupara Games
De 2021 LTS à Unity 6
The Wild at Heart est sorti sur Unity 2021; Echo Weaver sortira sur Unity 6, verrouillé sur une seule version peu avant sa sortie. Interrogé sur ce qui a changé de jour en jour entre les versions, Chris n'a pas hésité : « Prefabs imbriqués et le mode édition – ce furent des changements de vie. »
Ankit dit que l'équipe a utilisé Composite Collider 2D de manière généreuse, et le pool d'objets natif d'Unity, ce qui lui a permis d'arrêter enfin de maintenir le pool d'objets personnalisé qu'il avait écrit pour The Wild at Heart. « C'est agréable d'utiliser les fonctionnalités intégrées chaque fois que c'est applicable », note-t-il.

Echo Weaver | Moonlight Kids | Akupara Games
Conseils de départ pour les petites équipes
En terminant l'entretien, nous avons demandé à Chris et Ankit quels conseils ils donneraient aux autres développeurs souhaitant créer des jeux avec Unity.
« Je vais probablement me faire griller pour ça », commence Ankit, « mais la sagesse conventionnelle dit de ne pas optimiser au début. » Je ne pense pas que ce soit nécessairement vrai. Vous pouvez concevoir d'une manière qui est performante dès le début, et cela peut vous faire gagner beaucoup de temps plus tard.
L'équipe a implémenté le système de flux par morceaux de Echo Weaver tôt dans le projet. Les particules ont été regroupées dès le premier jour. Ankit essaie toujours d'être prudent avec la commodité de C#, car la pression de la collecte des déchets peut s'accumuler rapidement. Si vous essayez d'envoyer un jeu, il doit être performant à la fin. Pourquoi se mettre dans une situation où cela semble impossible ? Rendre les choses performantes plus tard signifie des changements majeurs.
Chris a donné quelques conseils sur le design et l'importance de s'appuyer sur l'identité créative de son studio. « Créer un jeu à accès contrôlé par les connaissances comme celui-ci dépend énormément de la vue d'ensemble », dit-il. Nous avons passé des années à itérer sur des éléments que nous ne pouvions terminer qu'une fois que le projet entier était assemblé. Beaucoup de cela aurait pu être scénarisé tôt, à la manière d'un film, tout en laissant beaucoup de place à l'itération.
Mais la seule chose qu'il ferait différemment serait de faire confiance à son instinct et de continuer à faire ce qui est familier et qui semble juste. Avec le recul, c'était une erreur de notre part de dire : « Bon, personne ne voulait The Wild at Heart, alors nous ferons quelque chose de complètement différent. » Qu'est-ce que les gens veulent ? Non – joue vraiment sur tes forces. Nous avons perdu beaucoup de temps à déterminer comment jouer sur le marché. Finalement, on se demandait juste : qu'est-ce qu'on fait ? Fais ce que tu sais bien faire. Fais le jeu que tu veux faire.
Echo Weaver est lancé aujourd'hui sur Steam, PlayStation®5, Nintendo Switch™ 2, Nintendo Switch et Xbox Series X|S. Découvrez plus de jeux Made with Unity sur notre page Steam Curator, et consultez d'autres histoires de développeurs Unity sur le Unity Blog et le Resource Hub.
Nintendo Switch est une marque déposée de Nintendo.