08.10.2026 · Signal Titans Editorial
Comment Moonlight Kids a conçu la gestion d’état et le streaming de boucle temporelle dans Unity 6
Le studio Moonlight Kids a détaillé l'architecture de streaming par blocs, la persistance d'état et l'optimisation du rendu du jeu Echo Weaver sous Unity 6.

Le développeur indépendant Moonlight Kids et l'éditeur Akupara Games ont détaillé l'architecture technique sous-jacente d'Echo Weaver, un jeu d'aventure à boucle temporelle conçu avec Unity 6. Après avoir utilisé Unity 2021 LTS pour leur précédent titre, The Wild at Heart, l'équipe de trois personnes a conçu des systèmes personnalisés de streaming et de gestion d'état afin de maintenir un monde interconnecté sans aucun écran de chargement.
Progression par la connaissance et persistance d'état
Au lieu de s'appuyer sur des améliorations physiques permanentes, Echo Weaver utilise une progression verrouillée par la connaissance : le monde se réinitialise en continu tandis que le joueur conserve ses informations. Pour gérer cet état proprement, l'équipe a séparé les données système entre les données éphémères de chaque session et la mémoire permanente du joueur. Les itinéraires de la carte et la progression narrative sont sérialisés sur disque, tandis que la géométrie des niveaux réinitialise son état de façon dynamique. Concernant les objets d'inventaire transportables, le transfert direct de leur propriété vers la couche de scène permanente a empêché la duplication ou la disparition d'objets lors des transitions entre blocs de streaming.
Découpage modulaire et architecture de réinitialisation
Pour offrir un streaming continu de l'univers, le jeu divise sa carte en blocs spatiaux distincts. La géométrie fixe du monde et les repères de transition restent chargés en permanence dans des scènes en arrière-plan. Les données temporaires — notamment l'instance du joueur, le gestionnaire de jeu et les compteurs de session actifs — résident dans une scène légère regroupant les éléments essentiels. Lors de la réinitialisation d'une boucle, le moteur décharge les blocs d'environnement actifs, purge un dictionnaire en mémoire de clés textuelles spécifiques à la session, puis détruit et réinstancie la scène d'essentiels avant de charger la zone de départ initiale.
Graphismes et optimisation du rendu
Les illustrations 2D dessinées à la main ont posé des défis spécifiques en matière de rendu et de mémoire durant le développement. L'activation de la compression des atlas de textures a permis de réduire la consommation de mémoire active aux alentours de 1 Go. Les éléments décoratifs de l'environnement sont retirés des blocs de carte lors de la phase de compilation, puis réinstanciés de façon asynchrone sur plusieurs images afin d'éviter les pics de charge sur le thread principal. Le studio a également développé un outil d'aplatissement de sprites personnalisé pour regrouper les éléments visuels répétés en un seul appel d'affichage (draw call), réduit les couches de textures lumineuses de six à trois, et remplacé son ancien code personnalisé de regroupement d'objets par le système d'object pool C# natif de Unity ainsi que le Composite Collider 2D. Le Frame Debugger de Unity a été utilisé tout au long du projet pour isoler les interruptions de regroupement et optimiser les performances par lots.
Illustration éditoriale générée par IA ; ce n’est pas une photographie documentaire.
Source: Echo Weaver: Building a time-loop metroidbrainia in Unity 6