• » Jeux Vidéo
  • » Toi aussi deviens indéveloppeur [Unity/UE4 pour platformers 2D osef]
hichlibedis
hichanbis

Hello les amis, j'ai un souci avec le combo Scriptable Object et serialization (save/load) JSON.

En gros j'ai un SO (Scriptable object) de runtime représentant mon GameProgress qui contient des références vers des instances d'objets divers et variés (classes C# simples et serializables pour la position du joueur, le nom de la scène, ses stats etc).
Je le serialise en JSON (save dans le dossier de sauvegarde Application.persistentDataPath), je ferme Unity puis rouvre, je déserialise (Load le fichier et j'overwrite mon SO GameProgress) => Tout baigne je retrouve bien ma progression.

Maintenant j'ai mis en place un SO AllConditions qui contient une liste de SO Condition qui a un booléen satisfied, ce qui me permet de dire si le joueur a satisfait une condition ou non (je change le bool au runtime quoi).

Le problème:
J'essaye maintenant d'ajouter AllConditions à mon SO GameProgress (dans l'espoir de pouvoir sauvegarder les conditions satisfaites ou non).
Ca marche bien si je reste dans Unity, en gros si je serialise, déserialise on est bon.
Par contre si je serialise, ferme Unity puis le rouvre, et déserialise mon json => toutes mes réferences sont missing.

Et c'est normal, JsonUtility.ToJson serialise une liste de réference vers les SO Condition et ces réferences sont les instances IDs éphèmères qui sont re-générés à chaque session (éditeur ou runtime). Donc en gros I'm fucked.

C'est quoi la solution pour serialiser une référence pérenne vers un SO ?
J'ai cru comprendre que le GUID était une solution mais aucune idée de comment m'en servir au moment du Save ou Load...

hichanbis (28 Dec 2017)