mercredi 20 juin 2018

[Unity3D][Défi50jours] Jour 2 - Travail de recherche et experimentations




Yoyoyo yo yoyoyo, je suis le ratz qui fait du rap...
Bonjour, update jour 2, ça va? Moi ça va, je fais les updates les lendemains, c'est malin, du coup on croit que je suis décalé et que je n'ai pas fait mes devoirs. Mais NON, QUE NENNI mon ami, je suis bel et bien dans les temps et ait bien effectué mon heure quotidienne de développement hier soir, en ce mardi 19 juin. Et aujourd'hui, c'est l'heure de l'article update, même s'il va être très court*. Alors accroche toi à ton slip, on est parti.






L'objectif du jour était simple: me renseigner sur comment faire un système de sauvegarde/chargement sous Unity, afin de déterminer s'il était possible de le faire en cours de route ou s'il valait mieux l'implémenter dès le début. Dès les premières recherches, il est apparu que faire des sauvegardes/chargements avec Unity est faisable assez facilement en utilisant le principe de Serialization. Pour faire simple, il s'agit du procédé qui permet de transformer des objet contenus dans la mémoire en flux d'octets qui pourront être stockés sur le disque dur, ou même envoyés sur le réseau. Le procédé inverse est appelé Deserialization.
J'ai alors commencé à me renseigner sur le sujet et ai appris plusieurs choses intéressantes:
- on peut Serializer beaucoup de types d'objet à condition de les marquer comme serializables dans le code
- en revanche, certains objets propres a Unity comme les GameObjects** ne peuvent pas être serializés par défaut. Il faut soit utiliser des ressources externes créés par d'autres personnes et disponibles sur le Unity Store, soit tricher un peu et faire en sorte de sérializer non pas l'objet, mais seulement ses propriétés (par exemple sa position, sa taille) .



De ces informations, il est apparu que plus tôt le système de sauvegarde/chargement serait mis en place, plus il sera simple a maintenir. En effet il faut pouvoir penser à tout ce que l'on a besoin de stocker a chaque sauvegarde et récuperer a chaque chargement. Et si le jeu est trop avancé, il sera difficile de se remémorer qu'est ce qui est important et qu'est ce qui ne l'est pas. Il faut donc commencer par quelque chose de simple, et a chaque nouvelle fonctionnalité créée, il faudra réfléchir a ce que l'on veut en sauvegarder et l'ajouter au système global de sauvegarde.
J'ai aussi choisi de faire moi même le système de Serialization, afin de comprendre comment il marche, et aussi parce que ce qui est disponible sur le store ressemble à une usine a gaz, et je suis à peu près certain de ne jamais tout utiliser de ses fonctionnalités.


Par la suite, j'ai donc suivi certains tutoriels, et essayé de mettre en place un début de système. Moins facile que ce que j'aurais cru. Mais après un poil plus d'une heure, j'ai fini par obtenir un début très simple:
- En lançant la scène, deux cubes apparaissent, ainsi qu'un bouton save et un bouton load
- En cliquant sur save, les cubes et leur positions sont sauvegardées dans un fichier
- En cliquant sur load, les cubes affichés sont détruits, le fichier est lu, et deux nouveaux cubes apparaissent aux positions sauvegardées.




Rien de bien fou donc, mais ça fonctionne, et par la suite il devrait être relativement simple d'ajouter de nouvelles choses à ce système de sauvegarde.

Voilà pour les nouvelles du jour, ce soir, je m'attaquerai donc à la création du terrain, voir si possible a la création de la grille. N'hésitez pas a me dire si ce type d'update vous convient, ou si vous préféreriez plus ou moins de contenu, ou voir du code peut être, je ne sais point, je suis toute ouïe.

Merci d'avoir lu et A+ sur Uranus



*   J'ai menti
** Les GameObjects se sont les objets principaux sous Unity, que l'on voit dans la scene et qui peuvent représenter un personnage, du décor, ou à peu près ce que le vont

Aucun commentaire:

Enregistrer un commentaire