Toi aussi deviens indéveloppeur [Unity/UE4 pour platformers 2D osef]
y a-t-il qqun pour rebrancher le cerveau de binouz
4 490 posts
depuis le 17/06/2010
Binouz

Réponse au message de hichanbis posté 28/12/2017 16h26

FIOU pepe_stress

J'ai mis du temps à comprendre ce que tu voulais faire mais je crois que j'ai compris. Pour moi je pense que ça aurait été plus simple de tout faire en JSON pour tes données (tu te fais une classe toute simple qui lit/écrit ton JSON au fur et à mesure), car les SO sont utiles justement pour se passer de structures JSON etc.

Mais bref maintenant que t'es parti là dedans ... :p

Je pense en effet que les GUID sont une solution pas connes smiley1 Un GUID (global unique identifier) c'est un numéro qui est garanti unique, tout simplement. La façon de l'utiliser est simple : tu associes un GUID (des infos ici => https://msdn.microsoft.com/fr-fr/librar … 110).aspx) à ton SO (c'est un champ string à la con).

Comme ça, t'as juste à sauvegarder le numéro GUID de l'objet côté JSON, et ensuite si la référence est missing, tu vas chercher parmi tous tes SO du type que tu veux celui qui a le GUID que tu cherches,et tu le réassignes, et voilà, le tour est joué.

Chui pas un grand master des SO (j'ai jamais trop compris pourquoi c'était la mode, même si je vois bien la praticité ici et là, je suis pas sur que ce soit vraiment "sein" d'en foutre partout) alors j'avoue que j'suis pas sur à 100% que ce que je dis c'est pas de la grosse merde, mais ça devrait marcher smiley122 Si Tim passe par là et qu'il a le temps pour tes conneries il te répondra ptet un truc plus opti.

Edit par Binouz (28/12/2017 18h19)

Lulu le rebelle
8 639 posts
depuis le 28/03/2011
Lucien Brémart

Ça doit être particulier une réunion de développeurs de JV.

Un mélange entre
tenor.gif

et

Edit par Lucien Brémart (28/12/2017 18h22)

L'homme sait faire du pain grâce à Dieu
Au pays des merguez
11 320 posts
depuis le 15/07/2008
hichanbis

Réponse au message de Binouz posté 28/12/2017 18h18

Merci, oui c'est ce que je lis un peu à droite à gauche aussi.
Quand même dingue de devoir réassigner soi-même des réferences et que ça save pas des GUID par défaut au runtime (dans l'éditeur y a une classe qui permet de le faire mais pas au runtime, surement une raison qui m'échappe).

Pour ta première remarque ce que tu proposes c'est de passer complètement à côté de l'intérêt des SO...
Les SO c'est quand même très cool dans l'éditeur (et quand tu commences à foutre des custom inspectors c'est la surpuissance) et pour gérer de la donnée de jeu (en prime t'as même quelques callback et des méthodes). Tu peux faire des changements à la volée (qui sont conservés par défaut). Tu peux même en faire des singletons sauf que là au moins tu vois tout dans l'éditeur.

Et l'autre intérêt pour moi des SO c'est justement la facilité de serialiser/déserialiser en JSON pour pouvoir bosser aussi en dehors de Unity.
Je crée une BDD en SO, je la sérialise en Json via un bouton dans l'éditeur.
Et si je suis au bureau à Paris, ou n'importe où en fait, je peux bosser sur ma base de données en éditant le json (même directement dans github si je veux) et la désérialiser dans le SO via un autre bouton dans l'éditeur une fois de retour à la maison. Super pratique si je veux faire un mass edit aussi.

Ca fait environ 2 mois que je me gave de tutos/présentation sur les SO donc je suis assez chaud dessus.

Les meilleures prés pour comprendre la puissance du truc:



Edit: Enfin jusqu'à présent j'étais bien mais là le souci que je rencontre avec mon SO qui liste des SO édités au runtime, et que je dois sérialiser est pas hyper simple.
Edit2: Je vais peut-être me simplifier la vie et stocker dans mon SO GameProgress une liste de satisfiedConditions et qui sera juste la liste des GUID de conditions satisfaites. Comme ça au Load je refous le bool à true pour toutes les conditions dont le GUID matche. Simple efficace.

Edit par hichanbis (28/12/2017 18h46)

.
6 038 posts
depuis le 30/04/2007
...

Réponse au message de hichanbis posté 28/12/2017 16h26

C'est un non-sens de serialiser un ScriptableObject en JSON, puisque justement les ScriptableObjects sont serialisés de base.
T'as juste à écrire le ScriptableObject en dur. Ou même l'avoir déjà en fichier dans ton projet, de cette façon tout ce que tu lui fais est persistant...

y a-t-il qqun pour rebrancher le cerveau de binouz
4 490 posts
depuis le 17/06/2010
Binouz

Réponse au message de hichanbis posté 28/12/2017 18h31

Ouais je vois mais comme dit Tim pour moi c'était soit tu pars full JSON, soit full SO, mais pour moi l'intérêt premier des SO c'était de tout foutre en dur et de se passer de JSON.

Bon après que j'en ai encore jamais utilisé de façon sérieuse donc j'ai pas d'avis tranché. Après voilà, tant que tu t'en sors avec ton système c'est le principal, je reviendrai peut-être te trasher dès que j'aurai un projet avec beaucoup de data à save smiley12

L'homme sait faire du pain grâce à Dieu
Au pays des merguez
11 320 posts
depuis le 15/07/2008
hichanbis

Réponse au message de ... posté 28/12/2017 20h38

... a écrit :

Réponse au message de hichanbis posté 28/12/2017 16h26
Ou même l'avoir déjà en fichier dans ton projet, de cette façon tout ce que tu lui fais est persistant...


Euh attends, un scriptable object c'est un asset de jeu. Il est soit en mémoire, soit dans ton dossier Assets.
Donc dans le cas où c'est un fichier asset tu peux pas le modifier de manière persistante au runtime, tout simplement parce que Unity utilise une instance de cet asset au runtime et pas l'asset lui-même.
Faut pas se laisser feinter par le mode éditeur, où Unity fait persister les changements dans l'asset quand tu sors du play mode. Une fois buildé ça se comporte pas pareil.
Tu peux faire des modifs de ton instance au runtime mais à la fin de ta session ça sera jamais persisté dans le fichier asset (ton OS le permettra pas de toute manière).

Voir: https://answers.unity.com/questions/344 … tom-a.html
ou https://forum.unity.com/threads/questio … me.477091/

Pour persister faut forcément que tu foutes ton fichier de sauvegarde dans le persistent path (eventuellement faire une copy direct du fichier SO sans passer par un json ça j'ai pas encore essayé mais je doute qu'il contienne les bonnes valeurs au runtime encore une fois...)

...ou alors y a un truc basique que j'ai pas compris

Edit par hichanbis (29/12/2017 07h24)

y a-t-il qqun pour rebrancher le cerveau de binouz
4 490 posts
depuis le 17/06/2010
Binouz

Réponse au message de hichanbis posté 28/12/2017 23h47

Je réponds de façon short parce que je suis sur tel mais normalement de ce que j'ai compris le fichier .asset est justement fait pour être écrit sur le disque en dur smiley13 et être loadé à la volée par Unity. Ou j'ai loupé un truc ?

Edit par Binouz (29/12/2017 12h42)

L'homme sait faire du pain grâce à Dieu
Au pays des merguez
11 320 posts
depuis le 15/07/2008
hichanbis

Réponse au message de Binouz posté 29/12/2017 12h41

Je vais attendre ta réponse moins short du coup smiley76

Lulu le rebelle
8 639 posts
depuis le 28/03/2011
Lucien Brémart

Le short en hiver en plus, c'est un coup à être grippé en plus.

Inspecteur Enrico
8 371 posts
depuis le 4/06/2009
Ancien-Combattant

Lulu la marrade

Lulu le rebelle
8 639 posts
depuis le 28/03/2011
Lucien Brémart

Rendez vous sur le parking de Lidl Montesson, ce soir à 0h00. On va voir si tu fais le malin.

Inspecteur Enrico
8 371 posts
depuis le 4/06/2009
Ancien-Combattant

Réponse au message de Lucien Brémart posté 29/12/2017 14h01
On avait compris la première fois Lulu la lourdeur. Je comprends que quelques mdr soient gratifiants et te font pousser des ailes mais le comique de répétition et les blagues h24 7/7 ça finit par lasser. Forcément, tu peux pas tjrs être au top. Lâche un peu le clavier et reviens-nous avec de l'inspi. En toute amitié.

Trisomie 51
2 906 posts
depuis le 2/11/2008
VV51

smiley68

Lulu le rebelle
8 639 posts
depuis le 28/03/2011
Lucien Brémart

Pète un coup, ça ira mieux.

Inspecteur Enrico
8 371 posts
depuis le 4/06/2009
Ancien-Combattant

Réponse au message de Lucien Brémart posté 29/12/2017 14h17
Je te laisse le dernier mot et te prie de m'excuser si je t'ai blessé avec ce "Lulu la marrade" assez agressif il faut l'avouer smiley130

La parole est aux développeurs.

y a-t-il qqun pour rebrancher le cerveau de binouz
4 490 posts
depuis le 17/06/2010
Binouz

Réponse au message de hichanbis posté 29/12/2017 12h46

Me revoilà smiley122

Mais du coup, parce que là j'suis un peu confus j'ai l'impression de m'embrouiller avec l'utilisation de base des Scriptable Object.

Au runtime :
- T'as un fichier bordel.asset dans le persistant data path
- Tu fais AssetDatabase.LoadAssetAtPath de bordel.asset
- T'as les datas
- Tu les modifies
- Tu réécris un fichier bordel.asset dans le persistant data path.

Même si c'était une instance on s'en fout non, le premier est écrasé et t'as bien ta nouvelle config en dur sur ton PC ?

Ou j'ai raté une histoire ?

L'homme sait faire du pain grâce à Dieu
Au pays des merguez
11 320 posts
depuis le 15/07/2008
hichanbis
Binouz a écrit :

Réponse au message de hichanbis posté 29/12/2017 12h46

Me revoilà smiley122

Mais du coup, parce que là j'suis un peu confus j'ai l'impression de m'embrouiller avec l'utilisation de base des Scriptable Object.

Au runtime :
- T'as un fichier bordel.asset dans le persistant data path => Non dans le data path (en gros dans Assets/ ). Dans le persistent data path t'as un json/xml/binaire logiquement (sauf si je me prends la tête à serialiser pour rien mais j'ai trouvé aucune info sur comment loader un SO au runtime... A priori soit il est dans Assets/ et tu peux le réferencer dans un monobehaviour via l'éditeur Unity, soit il est dans Assets/Resources et tu peux faire un Resources.Load())
- Tu fais AssetDatabase.LoadAssetAtPath de bordel.asset => Non ça c'est une classe du namespace UnityEditor donc pas au runtime
- T'as les datas => Oui
- Tu les modifies => Oui sauf que ça modifie pas le fichier asset mais une instance de ton SO en mémoire
- Tu réécris un fichier bordel.asset dans le persistant data path. => Voir premier point.

Même si c'était une instance on s'en fout non, le premier est écrasé et t'as bien ta nouvelle config en dur sur ton PC ? => Nope. Si c'est un asset ben t'écrases pas des assets de jeu au runtime. Si c'est un fichier que tu loades du persistent data path, ben c'est pas un SO mais un fichier plat (xml, json, binaire) que tu désérialises en une instance. Voir mes liens précedents.

y a-t-il qqun pour rebrancher le cerveau de binouz
4 490 posts
depuis le 17/06/2010
Binouz

Réponse au message de hichanbis posté 2/01/2018 15h19

pepe_stress WOW.

J'suis un peu choqué et déçu, du coup c'est quoi l'intérêt par rapport à un prefab avec un script dessus ? Je pensais que moi l'interêt des datas en .asset c'est que tu pouvais le tej ou tu voulais dans ton PC et le loader quand tu veux à la volée hors unity ?

Enfin à moins que je fais encore fausse route mais si tu écris directement le scriptable object en binaire, et que tu le récup en binaire en disant que c'est un type "MonScriptableObject", c'est bon non ? C'est de la serialisation de base.
J'ai du mal à croire qu'ils aient conçu tout un système pratique pour stocker des datas mais avec l'impossibilité qu'ils soient persistant sur le disque smiley20 En plus de pas donner une API haut niveau pour faire cette petite sauvegarde.

Tim, tu utilises des scriptable object dans ton projet toi ? Si oui, t'as un exemple d'utilisation qui change la vie ?

Edit par Binouz (2/01/2018 15h26)

L'homme sait faire du pain grâce à Dieu
Au pays des merguez
11 320 posts
depuis le 15/07/2008
hichanbis
Binouz a écrit :

Réponse au message de hichanbis posté 2/01/2018 15h19

Enfin à moins que je fais encore fausse route mais si tu écris directement le scriptable object en binaire, et que tu le récup en binaire en disant que c'est un type "MonScriptableObject", c'est bon non ? C'est de la serialisation de base.

Voilà mais du coup je préfère le json parce que c'est éditable plus facilement.

Binouz a écrit :

Réponse au message de hichanbis posté 2/01/2018 15h19
J'suis un peu choqué et déçu, du coup c'est quoi l'intérêt par rapport à un prefab avec un script dessus ? Je pensais que moi l'interêt des datas en .asset c'est que tu pouvais le tej ou tu voulais dans ton PC et le loader quand tu veux à la volée hors unity ?

De la donnée ou du comportement (tu peux faire des objets delegates) que tu attaches pas à un objet en scène.
Genre pour un RPG stocker des abilities ou des stats d'ennemis. Si je fais une modif je casse pas tout j'ai un seul point de maintenance.
Et dans l'éditeur tu peux foutre des custom editors sympas.
J'ai vu un exemple d'un system de game event et listeners avec des SO. Tu mets un bouton "Raise Event" dans ton custom editor et tu peux raise des events quand tu veux en play mode pour tester ton comportement. C'est quand même bien pratique.

Edit par hichanbis (2/01/2018 15h37)

y a-t-il qqun pour rebrancher le cerveau de binouz
4 490 posts
depuis le 17/06/2010
Binouz

Réponse au message de hichanbis posté 2/01/2018 15h33

Ah oui je vois pour l'utilisation, ça permet de centraliser les valeurs du game design. Je fonctionnais pas mal avec un plugin qui téléchargeait des données depuis Google Sheets moi (ça permettait au GD d'être "collaboratif") mais j'avoue que les Scriptable Object ça me tente de me lancer dedans depuis un pti moment, j'suis toujours en mode vieux con avec mon gsheet.

Du coup faut vraiment séparer data du game design (SO) et data à sauvergarder.

Edit par Binouz (2/01/2018 15h43)

Fiché S
Oops,I did it again!
6 060 posts
depuis le 12/03/2007
Britney

Bon et sinon,c est en quelle année qu on verra Hichanbis à l'E3 afficher un tatouage Xbox sur son biceps?

Edit par Britney (2/01/2018 15h53)

social jojostice
11 597 posts
depuis le 13/07/2006
Jojo

La nouvelle sensation des projets indépendants, le "Braid" de hichanis.

"Bread". smiley18

y a-t-il qqun pour rebrancher le cerveau de binouz
4 490 posts
depuis le 17/06/2010
Binouz

Putain je suis ptet grave à la bourre et vu que j'ai majoritairement dev en VR ces derniers temps j'ai pas trop regardé les dernières tech de mise en scène, mais je viens de découvrir la Timeline et Cinemachine dans 2017, cette tuerie smiley115

Tellement ez de faire des caméras fixes et des transitions de plans comme dans MGS ou RE maintenant, ou même suivre son perso sans que ce soit la grosse cahute.

Vivement le Package Manager dans 2018, ils viennent d'intégrer ProBuilder aussi smiley45 J'l'ai utilisé sur mon premier projet, ça sert bien pour prototyper voir dépanner quelques formes simples

Edit par Binouz (21/02/2018 17h13)

L'homme sait faire du pain grâce à Dieu
Au pays des merguez
11 320 posts
depuis le 15/07/2008
hichanbis
y a-t-il qqun pour rebrancher le cerveau de binouz
4 490 posts
depuis le 17/06/2010
Binouz

Réponse au message de hichanbis posté 22/02/2018 10h32

Bien vu smiley12 je suis donc bien à la grosse bourre feelsbad

Toi aussi deviens indéveloppeur [Unity/UE4 pour platformers 2D osef]
Remonter

Pied de page des forums

ContactMentions légales