[architecture] Ou lier mes sprites ?

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
ZeroKcm
Messages : 175
Inscription : 09 Juil 2013 21:16

[architecture] Ou lier mes sprites ?

Message par ZeroKcm » 03 Déc 2019 12:12

Hello,

J'ai une question d'architecture sur Unity. Je ne suis pas un débutant : je l'utilise depuis très longtemps (2007)

Y'a un truc qui m’embête toujours et qui m'arrive souvent.

J'ai besoin d'utiliser fréquemment des mêmes sprites et textures dans pleins de scripts différents.
Le plus simple serait de lier mes sprites dans tous mes scripts, mais c'est horrible :)

Je cherche la solution la plus optimisée au niveau perfs & mémoire.

Le plus souvent, je créé un GameObject Data dont je fais un singleton.
Ensuite, si j'ai besoin d'un de mes sprites, j'accèdes à mon singleton depuis n'importe où :

Code : Tout sélectionner

void Update()
{
    sprite = Data.Instance.monJoliSprite;
}
Je trouve que c'est un peu lourd à cause du singleton.

J'ai essayé de remplacer Data par un ScriptableObject mais, ça demande de le lier dans tous mes objets. J'ai peur de faire pire que le singleton car il est possible que j'instancie 1000 objets qui contiennent tous ce lien.

Vous faites comment vous ?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [architecture] Ou lier mes sprites ?

Message par boubouk50 » 03 Déc 2019 14:13

Salut,
Est-ce que les sprites sont accessibles via un scriptableObject? (question que je pose)
Cela t'enlèverait l'utilisation d'un singleton et leur accès serait illimité et partagé par tous.
Tu aurais donc un Asset qui possède tous les sprites dont tu te sers où tu pourrais piocher ce que tu souhaites quand tu le souhaites.
Avec l'avantage de créer différents assets variantes du premier pour avoir des packages de sprites.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

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

Re: [architecture] Ou lier mes sprites ?

Message par Alesk » 03 Déc 2019 16:03

Je ne connais pas non plus de solution miracle dans ce cas

A un moment il faut bien définir un point d'accès quelque part. Donc que ça soit un singleton ou un scripable object ... ça revient un peu au même je pense.

Avatar de l’utilisateur
ZeroKcm
Messages : 175
Inscription : 09 Juil 2013 21:16

Re: [architecture] Ou lier mes sprites ?

Message par ZeroKcm » 03 Déc 2019 22:08

J'ai regardé pas mal de vidéos la dessus et je pense avoir trouvé la solution :

On peut utiliser un singleton de ScriptableObject

Code : Tout sélectionner

[CreateAssetMenu(menuName = "ScriptableObjects/Data")]
public class Data : ScriptableObject
{
	public static Data Instance { get; private set; }

	[RuntimeInitializeOnLoadMethod]
	private static void Init()
	{
		Instance = Resources.FindObjectsOfTypeAll<Data>()[0];
	}

	public Sprite carrotIcon;
	public Sprite rabbitIcon;
	public Material rabbitMaterial;
	public Sprite goldIcon;
	...
}
C'est génial, pratique et y'a pas besoin de GameObject inutile.

Explications ici : https://baraujo.net/unity3d-making-sing ... matically/

Répondre

Revenir vers « Scripting »