Page 1 sur 2

[Résolu] Des couleurs qui changent toute seules

Publié : 12 Jan 2020 16:11
par JollyStone
Bonjour,

Via script, j’applique une couleur au composant Image d’un Panel UI.
Cette couleur dans le script à la valeur RGBA : 190/90/0/255
En mode Play, cette valeur s’est miraculeusement transformée en 191/91/0/255 (Valeur lue dans la fenêtre d’édition de l’Inspector). Jusque là ce n'est pas trop gênant.
Plus bizarre encore, la couleur réellement affichée dans le champs de l’Inspector et utilisée dans la fenêtre Game correspond approximativement à 255/255/11/255.

J’ai également testé dans le script la valeur RVBA 240/15/15/255.
La valeur de l’éditeur est 191/12/12/255 et la couleur réelle affichée est totalement blanche.

Est-ce quelqu'un à déjà rencontré cette bizarrerie ?
Une idée pour résoudre ce problème ?

Re: Des couleurs qui changent toute seules

Publié : 12 Jan 2020 16:42
par Max
Bonjour,
JollyStone a écrit :
12 Jan 2020 16:11
Cette couleur dans le script à la valeur RGBA : 190/90/0/255
En mode Play, cette valeur s’est miraculeusement transformée en 191/91/0/255 (Valeur lue dans la fenêtre d’édition de l’Inspector). Jusque là ce n'est pas trop gênant.
une histoire d'arrondi je suppose, rien de bien gênant visuellement
JollyStone a écrit :
12 Jan 2020 16:11
Plus bizarre encore, la couleur réellement affichée dans le champs de l’Inspector et utilisée dans la fenêtre Game correspond approximativement à 255/255/11/255.
ça il n'y a pas de miracle. Si cela change, c'est que c'est commandé quelque part. Reste à trouver où.

Déjà, comment procèdes-tu dans ton script pour changer la couleur de l'image.

Re: Des couleurs qui changent toute seules

Publié : 12 Jan 2020 16:57
par JollyStone
Salut Max,

Ah ! Il y a des arrondis pour des entiers (int) ?

Les valeur RGBA sont contenue dans un fichier JSON et lues depuis un script.

Code : Tout sélectionner

private void LoadGameData ()
	{
		string filePath = Path.Combine (Application.streamingAssetsPath, gameDataFileName);
		if (File.Exists (filePath)) {
			string dataAsJson = File.ReadAllText (filePath);
			GameData loadedData = JsonUtility.FromJson<GameData> (dataAsJson);
			allRoundData = loadedData.allRoundData;
		} else {
			Debug.LogError ("Impossible de charger les données");
		}
	}
Ensuite appliquée à l’objet.

Code : Tout sélectionner

public Color categoryColor;
	public Image backgroundImage;
…
categoryColor = new Vector4 (currentRoundData.r, currentRoundData.g, currentRoundData.b, currentRoundData.a);
backgroundImage = GameObject.Find ("BackgroundPanel").GetComponent<Image> ();
		backgroundImage.color = categoryColor;
J’espère que ces informations suffisent, sinon je posterai l’entièreté des scripts.

Re: Des couleurs qui changent toute seules

Publié : 12 Jan 2020 17:08
par Max
JollyStone a écrit :
12 Jan 2020 16:57
Ah ! Il y a des arrondis pour des entiers (int) ?
Les composant RGBA sont généralement passés par des floats compris entre 0 et 1.0f. Voir par exemple la doc sur Color.

Après, je ne vois pas trop le lien entre tes deux scripts.
Le second, qui se charge de changer la couleur de backgroundImage le fait à partir de d'une variable publique.
backgroundImage semble récupéré par un Find. Mais pour categoryColor comment est-elle affecté. Par le biais de l'inspector, ou suite au chargement des données (script 1) ?

Re: Des couleurs qui changent toute seules

Publié : 12 Jan 2020 17:32
par JollyStone
En effet, ça semble un peu tordu comme méthode.
il s’agit au départ du Quizz (tuto Unity : https://learn.unity.com/tutorial/live-s ... 002053b652) que je tente d’améliorer.
Donc, je crée 6 catégories de questions. Chaque catégorie a sa propre couleur, déterminée dans le fichier JSON.
Le premier script charge les données du fichier JSON (les questions, et notamment la couleur de la catégorie).
Le second script construit la couleur selon les données du JSON, récupère l’objet backgroundImage et lui applique la couleur.

[Édit]
Étrangement, ce problème survient pour deux des 6 catégories. Les 4 autres fonctionnes parfaitement.
Quelque soit la catégorie sélectionnée, le reste est construit de la même manière.

Re: Des couleurs qui changent toute seules

Publié : 12 Jan 2020 17:41
par Max
JollyStone a écrit :
12 Jan 2020 17:32
Le second script construit la couleur selon les données du JSON, récupère l’objet backgroundImage et lui applique la couleur.
As tu vérifié à coup de Debug.Log si les valeurs récupées et qui sont affecté à backgroundImage sont bonnes et cohérentes ?

Re: Des couleurs qui changent toute seules

Publié : 12 Jan 2020 17:46
par JollyStone
Oui, bien sûr.
Les valeurs affichées dans la console sont bien égales aux valeurs du fichier JSON.

Je peux te fournir tous les scripts. Est-ce seulement possible par message personnel ?

Re: Des couleurs qui changent toute seules

Publié : 12 Jan 2020 17:51
par Max
Le mieux c'est souvent un package, avec une scène de test reproduisant le soucis. Au moins, tu as tous les éléments pouvant interférer, script comme GameObjects et leurs componants.
Et oui, si tu préfères, par MP il n'y a pas de soucis.

Re: Des couleurs qui changent toute seules

Publié : 12 Jan 2020 18:57
par Max
Ok, en regardant tes scripts, les données de couleur récupérées sont en fait dans ce
format: public int r, g, b, a;.
Le soucis (et cela rejoint un peu ce que je disais plus haut), c'est que quand tu fais
un backgroundImage.color = categoryColor;, categoryColor étant un Color, il attend théoriquement 4 float (de valeurs comprises entre 0 à 1.0f). Pas d'int (dont les valeurs seraient de 0 à 255).

Ce que tu peux faire, c'est (pour reprendre la syntaxe utilisée dans ton script) écrire:

Code : Tout sélectionner

categoryColor = new Vector4 (currentRoundData.r/255.0f, currentRoundData.g/255.0f, currentRoundData.b/255.0f, currentRoundData.a/255.0f);

Re: Des couleurs qui changent toute seules

Publié : 13 Jan 2020 11:16
par JollyStone
Ah oui ! C'est subtile.
Je trouve ça un peu tordu pour un débutant.
J'avais commencé avec des floats puis suis passé en int car le problème était déjà présent.

Un tout grand merci pour ton aide Max, ça fonctionne parfaitement maintenant pour toutes les catégories.
Bonne journée !