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

Tous les tutoriaux unity, de la communauté ou d'ailleurs.
Avatar de l’utilisateur
Drakulo
Messages : 113
Inscription : 10 Mars 2017 22:49
Contact :

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

Message par Drakulo » 07 Jan 2018 13:17

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:
Fun Games Maker @TriplArt
Coach à esprit UNITY : Finissez vos jeux, vivez de votre passion
Enseignant de programmation / Unity3D à Bellecour Ecole

Avatar de l’utilisateur
@RLG
Messages : 367
Inscription : 17 Jan 2015 00:13
Localisation : Rennes

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

Message par @RLG » 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

Et comme toi, je le conseille à tous ;-)
Everything happens for a reason. Sometimes the reason is that you're stupid and make bad decisions.

Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

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

Message par DevAmat » 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...

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

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

Message par Alesk » 02 Fév 2018 15:54

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 ;)

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

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

Message par Farstone » 10 Fév 2018 07:42

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

Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

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

Message par DevAmat » 14 Fév 2018 15:28

Merci pour le lien. Je pense vraiment intégrer ce système dans un futur projet.

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

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

Message par Farstone » 14 Fév 2018 21:00

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.

MIRANA3
Messages : 5
Inscription : 27 Fév 2018 18:26

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

Message par MIRANA3 » 27 Fév 2018 18:57

Super le lien j' essaie sinon en cas de souci je reviendrai poser une question

Tarkan
Messages : 3
Inscription : 05 Mars 2018 14:36

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

Message par Tarkan » 05 Mars 2018 15:13

Merci pour cette méthode et merci pour le lien vidéo.

Avatar de l’utilisateur
Drakulo
Messages : 113
Inscription : 10 Mars 2017 22:49
Contact :

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

Message par Drakulo » 17 Mars 2018 10:37

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.
Fun Games Maker @TriplArt
Coach à esprit UNITY : Finissez vos jeux, vivez de votre passion
Enseignant de programmation / Unity3D à Bellecour Ecole

Répondre

Revenir vers « Tutoriaux »