Page 1 sur 2

[Tutoriel] Structurer son projet autour de la donnée

Publié : 07 Jan 2018 13:17
par Drakulo
Bien le bonjour.

Quand on commence à créer un jeu vidéo, on est au taquet au début. Et on fonce tête baissée dans la réalisation. Vous vous reconnaissez ? Le problème, c'est que vous allez rater le plus important. :(

Il ne vous est jamais arrivé de vouloir modifier une fonctionnalité dans votre jeu mais d’abandonner parce que ça a trop d’impacts ? Ou que c'est trop compliqué ? Il est pourtant possible d’éviter tous ces tracas avec cette nouvelle technique de structuration. J'ai vérifié sur un projet réel, je vous garantis que ça marche. :|

:arrow: https://www.esprit-unity.fr/nouvelle-te ... t-unity3d/

Si vous trouvez une boulette ou avez des remarques, n'hésitez pas à me faire un retour ici ou en commentaire sur l'article.

Happy Gamedev ! :hello:

Re: [Tutoriel] Structurer son projet autour de la donnée

Publié : 08 Jan 2018 11:04
par @RLG
Il y avait eu une très bonne conférence au Unite 2017 à Austin sur ce sujet ;
https://youtu.be/raQ3iHhE_Kk

Et comme toi, je le conseille à tous ;-)

Re: [Tutoriel] Structurer son projet autour de la donnée

Publié : 23 Jan 2018 16:07
par DevAmat
Effectivement c'est cool, merci pour le partage. Par contre ou faut faire attention c'est que lorsque en mode Play on modifie le ScriptableObject il n'est pas reset à la sortie du mode play.
J'ai trouvé une solution:

Code : Tout sélectionner

public FloatVariable MaxHP;  // il s'agit du ScriptableObject
	void Awake()
	{
		MaxHP = Instantiate(MaxHP);
	}
Je sais pas si c'est propre de passer par ce bout de code pour contourner ce problème ou si il y a une utilisation plus logique du ScriptableObject qui éviterait ce souci.

En fait faudrait créer un ScritableObject qui stock la vie (mode base de donné)
Et un ScritableObject qui serait "dynamique" pour s'en servir en runtime?

Par exemple:

Code : Tout sélectionner

public FloatVariable MaxHPInit;  // il s'agit du ScriptableObject type base de donné
public FloatVariable MaxHPDynamique;  // il s'agit du ScriptableObject qui sert durant le runtime
	void Awake()
	{
		MaxHPDynamique.value = MaxHPInit.value;
	}
PS: J'ai pas encore regardé la vidé posté par @RLG , il y a peut être la réponse...

Re: [Tutoriel] Structurer son projet autour de la donnée

Publié : 02 Fév 2018 15:54
par Alesk
Bon alors on a déjà échangé brièvement sur FB à ce sujet, mais je relance ici :

Cette méthode semble très efficace pour éviter les singletons... Par contre dès qu'il s'agit d'instancier dynamiquement des gameobjects, ça me semble beaucoup plus hasardeux.

Quelles seraient les pistes à explorer pour permettre cette utilisation des scriptable objects dans le cas où l'on désire les utiliser sur des instances de prefabs ?

Je précise que je n'ai pas encore testé tout ça, je m'y colle demain ;)

Re: [Tutoriel] Structurer son projet autour de la donnée

Publié : 10 Fév 2018 07:42
par Farstone
DevAmat a écrit :
23 Jan 2018 16:07
Effectivement c'est cool, merci pour le partage. Par contre ou faut faire attention c'est que lorsque en mode Play on modifie le ScriptableObject il n'est pas reset à la sortie du mode play.
J'ai trouvé une solution:

Code : Tout sélectionner

public FloatVariable MaxHP;  // il s'agit du ScriptableObject
	void Awake()
	{
		MaxHP = Instantiate(MaxHP);
	}
Je sais pas si c'est propre de passer par ce bout de code pour contourner ce problème ou si il y a une utilisation plus logique du ScriptableObject qui éviterait ce souci.

En fait faudrait créer un ScritableObject qui stock la vie (mode base de donné)
Et un ScritableObject qui serait "dynamique" pour s'en servir en runtime?

Par exemple:

Code : Tout sélectionner

public FloatVariable MaxHPInit;  // il s'agit du ScriptableObject type base de donné
public FloatVariable MaxHPDynamique;  // il s'agit du ScriptableObject qui sert durant le runtime
	void Awake()
	{
		MaxHPDynamique.value = MaxHPInit.value;
	}
PS: J'ai pas encore regardé la vidé posté par @RLG , il y a peut être la réponse...
En faite c'est ça la force des ScriptableObject, ils sont sauvegardé sur le disque, tu peux t'en servir comme stockage pour sauvegarder des infos comme les options ou un nom d'utilisateur facilement. Tu peux utiliser le callback OnEnable qui s’exécute a chaque fois que unity recompile les scripts, et quand le scriptable object est chargé ou crée, sa te permettra de reset automatiquement. Sinon il y a CreateInstance qui te permet d’instancier un scriptable object sans le sauvegarder dans un dossier.
On va par exemple préférer sauvegarder une variable vieMax dans un scriptable mais pas vieActuel (a moins que tu t'en servent comme sauvegarde).
Voici une autre vidéo intéressante sur le sujet que je conseille vraiment si tu veux introduire ce système dans ton projet : Unite Europe 2016 - Overthrowing the MonoBehaviour tyranny in a glorious ScriptableObject revolution

Re: [Tutoriel] Structurer son projet autour de la donnée

Publié : 14 Fév 2018 15:28
par DevAmat
Merci pour le lien. Je pense vraiment intégrer ce système dans un futur projet.

Re: [Tutoriel] Structurer son projet autour de la donnée

Publié : 14 Fév 2018 21:00
par Farstone
DevAmat a écrit :
14 Fév 2018 15:28
Merci pour le lien. Je pense vraiment intégrer ce système dans un futur projet.
Par contre d'après certain utilisateur du forum unity officiel, la sauvegarde est un peu aléatoire et capricieuse, donc privilégie plutôt les sauvegarde sur fichier txt ou autres.

Re: [Tutoriel] Structurer son projet autour de la donnée

Publié : 27 Fév 2018 18:57
par MIRANA3
Super le lien j' essaie sinon en cas de souci je reviendrai poser une question

Re: [Tutoriel] Structurer son projet autour de la donnée

Publié : 05 Mars 2018 15:13
par Tarkan
Merci pour cette méthode et merci pour le lien vidéo.

Re: [Tutoriel] Structurer son projet autour de la donnée

Publié : 17 Mars 2018 10:37
par Drakulo
Hello.

(désolé pour le temps de réponse, je suis tombé dans un trou noir ces 2 derniers mois :hehe: )
@RLG a écrit :
08 Jan 2018 11:04
Il y avait eu une très bonne conférence au Unite 2017 à Austin sur ce sujet ;
https://youtu.be/raQ3iHhE_Kk
Mon article est justement basé sur cette conf. Comme pas mal de gens ne parlent pas anglais couramment, je me suis dit que ça pourrait être cool pour les francophones d'avoir une version en français.
Twiixy a écrit :
14 Fév 2018 21:00
Par contre d'après certain utilisateur du forum unity officiel, la sauvegarde est un peu aléatoire et capricieuse, donc privilégie plutôt les sauvegarde sur fichier txt ou autres.
Je confirme malheureusement cette partie... je ne conseille pas cette solution pour stocker des données "joueur". Par contre le principe reste génial pour tout ce qui est runtime.