Optimiser l'autonomie de la batterie dans Monster Walk

Découvrez notre entretien avec Jenny Xu, PDG de Talofa Games, dans lequel elle explique les défis techniques et les choix de développement qui ont permis de créer une expérience fluide en arrière-plan, notamment la manière dont l'équipe utilise les hooks Unity pour les événements OnApplicationFocus et OnApplicationPause afin de sauvegarder l'état de la partie.
JENNY XU :Lorsque nous avons imaginé Monster Walk pour la première fois, le principal défi de conception auquel nous étions confrontés était de trouver comment faire en sorte que les pas, comme ceux que l'on fait dans la vie réelle, donnent l'impression de jouer à un jeu. Ce n'est pas une corvée, on n'a pas l'impression que c'est rajouté après coup, on n'a pas l'impression d'avoir affaire à une application de remise en forme et à un jeu, deux choses distinctes, mais vraiment à un jeu auquel on joue en adoptant un mode de vie plus sain dans la vraie vie.
Le plus grand défi technique a été de faire en sorte que ces éléments en temps réel, comme les données en direct, s'intègrent de manière vraiment fluide et naturelle dans l'expérience de jeu, tout en tenant compte des différentes contraintes liées aux plateformes, telles que le chargement des arrière-plans et l'autonomie de la batterie. Pour nous, l'essentiel était de mettre en place un système de suivi des pas en temps réel, tout en veillant à ce que cela ne soit ni trop rébarbatif ni trop gratifiant pour les joueurs, mais qu'il les incite réellement à rester fidèles à leur programme de remise en forme.
CONSOLIDATION DES FLUX DE DONNÉES DE PAS
Le fait d'avoir utilisé Unity nous a vraiment facilité la tâche pour nous connecter aux plugins natifs Android et iOS. Et nous avons affaire à Android Health Connect, Google Fit, Garmin, toutes ces sources de données qui alimentent notre jeu. Et nous devons rassembler toutes ces informations et indiquer au joueur le nombre de pas qu'il a, selon nous, effectués entre sa dernière connexion au jeu et le moment où il l'a relancé.
Heureusement, Unity nous offre la possibilité d'accéder aux API natives. En fait, on a même fini par créer notre propre compteur de pas, parce qu'on ne pouvait pas partir du principe qu'ils disposaient de Health Connect. Nous ne pouvions pas partir du principe qu'ils avaient Google Fit. Peut-être n'avaient-ils rien. Nous avons donc développé ce plugin natif intégré à Unity, qui fonctionne de manière transparente et qui compte les pas en arrière-plan, même lorsque l'application est fermée.
Nous avons donc dû mettre en place une solution en trois couches au sein de notre projet Unity pour prendre cela en charge. Et, en même temps, il ne faut pas qu'il consomme trop de batterie ni qu'il tourne en permanence en arrière-plan, au risque que les joueurs aient envie de le désinstaller.
Et il en allait de même lorsqu'il s'agissait de mettre en balance toutes les données que nous recevions. Parce qu'avec Apple, vous avez Apple Health, qui enregistre les pas effectués en avant-plan, par exemple lorsque l'application est ouverte et que le téléphone bouge : peut-être que le joueur fait un pas, mais Apple Health enregistre également ce pas à ce moment-là.
Alors, comment procède-t-on pour regrouper les données redondantes ? Comment faire pour que ce ne soit ni trop gratifiant, ni trop punitif ? Trouver le juste équilibre, s'adapter au modèle d'appareil utilisé par le joueur et lui procurer une expérience magique : voilà quel a été le plus grand défi technique.
OPTIMISER L'AUTONOMIE DE LA BATTERIE
Comme Monster Walk est un jeu qui tournait pratiquement en arrière-plan toute la journée, nous avons dû concevoir des systèmes permettant de faire progresser le jeu sans surchauffer le téléphone. Même entre iOS et Android, le fonctionnement en arrière-plan est très différent.
Nous avons donc dû redoubler de prudence pour la sauvegarde de l'état des joueurs. En effet, comme nous effectuons un traitement en arrière-plan très important des déplacements et des données de santé, nous avons dû donner aux joueurs l'impression que, même lorsqu'ils s'absentaient, leurs monstres continuaient à les accompagner, même si l'application était fermée.
Je dirais donc que cela tient en grande partie à la conception de l'interface, mais je dirais aussi que nous faisons très attention à bien fermer les processus, en veillant à ce qu'aucun thread ne s'exécute en arrière-plan, afin que l'utilisateur ne voie pas l'application rester ouverte et vider la batterie.
Nous exploitons donc de nombreux hooks Unity tels que OnApplicationFocus et OnApplicationPause, et nous profitons simplement de ces moments pour enregistrer rapidement l'état. Et puis, à chaque fois qu'ils reviennent, on vérifie notre dernière sauvegarde, on reprend la partie et on regarde leur nombre de pas, puis on leur dit : « Tiens, tu viens en fait de marcher autant avec ton petit monstre. » Bon, bienvenue de retour.
Découvrez d'autres témoignages de développeurs Unity sur le blog Unity et le Centre de ressources.
