boules multicouleur a chaque tire

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
zula23
Messages : 11
Inscription : 13 Juil 2019 18:42

boules multicouleur a chaque tire

Message par zula23 » 13 Juil 2019 18:54

Bonjour,

J'ai un code pour les tracets des boules que je tire, et j'aimerai savoir comment changer la couleur a chaque tire , ou alors a chaque boules qui apparait, j'ai essayer avec le Color.Lerp mais ceci n'est qu"'un gradiant, et je cherche vraiment que chacun des boules soit different:

Code : Tout sélectionner

Vector3[] array = new Vector3[this.path.count * 2u];
			Vector2[] array2 = new Vector2[this.path.count * 2u];
			Color[] array3 = new Color[this.path.count * 2u];
			int[] array4 = new int[(this.path.count - 1u) * 6u];
			float timeStamp = this.path.points[0].timeStamp;
			float num3 = this.path.points[(int)((uint)((UIntPtr)(this.path.count - 1u)))].timeStamp - this.path.points[0].timeStamp;
			float num4 = 1f / num3;
			Color color = new Color(1f, 1f, 1f, 0f);
			int num5 = 0;
			while ((long)num5 < (long)((ulong)this.path.count))
			{
				PathPoint pathPoint = this.path.points[num5];
				float num6 = pathPoint.timeStamp - timeStamp;
				float num7 = num6 * num4;
				Vector3 vector;
				if (num5 == 0)
				{
					vector = pathPoint.position - this.path.points[num5 + 1].position;
				}
				else
				{
					vector = this.path.points[num5 - 1].position - pathPoint.position;
				}
				Vector3 a = new Vector3(-vector.z, 0f, vector.x);
				a.Normalize();
				Vector3 a2 = a * Mathf.Sin(pathPoint.timeStamp * 100f) * 0.025f;
				array[num5 * 2] = pathPoint.position + a * this.size * 0.5f + a2 * this.waveRatio;
				array[num5 * 2 + 1] = pathPoint.position + -a * this.size * 0.5f + a2 * this.waveRatio;
				Color color2;
				if (num5 == 0 || (long)num5 == (long)((ulong)(this.path.count - 1u)) || num2 > num6 + num)
				{
					color2 = color;
				}
				else if (num2 > num6)
				{
					color2 = new Color(1f, 1f, 1f, 1f - (num2 - num6) / num);
				}
				else
				{
					color2 = Color.white;
				}
				array3[num5 * 2] = color2;
				array3[num5 * 2 + 1] = color2;
				array2[num5 * 2] = new Vector2(num7 * this.uvScale, 0f);
				array2[num5 * 2 + 1] = new Vector2(num7 * this.uvScale, 1f);
				if (num5 > 0 && !pathPoint.split)
				{
					array4[(num5 - 1) * 6] = num5 * 2 - 2;
					array4[(num5 - 1) * 6 + 1] = num5 * 2 - 1;
					array4[(num5 - 1) * 6 + 2] = num5 * 2;
					array4[(num5 - 1) * 6 + 3] = num5 * 2 + 1;
					array4[(num5 - 1) * 6 + 4] = num5 * 2;
					array4[(num5 - 1) * 6 + 5] = num5 * 2 - 1;
				}
				num5++;
			}
			Mesh mesh = base.GetComponent<MeshFilter>().mesh;
			mesh.Clear();
			mesh.vertices = array;
			mesh.uv = array2;
			mesh.colors = array3;
			mesh.triangles = array4;
		}




Merci d'avance

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: boules multicouleur a chaque tire

Message par EmileF » 13 Juil 2019 19:00

Salut,

je n'ai pas approfondi ton code, d'ailleurs je n'y comprends rien, mai j'ai remarqué une chose:

Code : Tout sélectionner

color2 = new Color(1f, 1f, 1f, 1f - (num2 - num6) / num);
Là tu ne changes la valeur que de la transparence. Ta couleur restera blanche plus ou moins transparent.

salut.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

zula23
Messages : 11
Inscription : 13 Juil 2019 18:42

Re: boules multicouleur a chaque tire

Message par zula23 » 13 Juil 2019 19:13

Oui effectivement, mais par exemple la couleur afficher est ici:

Code : Tout sélectionner

else
				{
					color2 = Color.white;
				}
				
j'avais mis un

Code : Tout sélectionner

color2 = Color.Lerp(Color.blue, Color.magenta, Mathf.PingPong(Time.time, 1f);
mais cela ne fonctionne qu'avec 2 couleurs et n'est qu'un gradiant, j'aimerai savoir si il y a moyen de faire un system de boucle "for" a la rigueur de couleur, qui, a chaque seconde change les valeurs.
$J'avais essay" quelque chose comme

Code : Tout sélectionner

for(double i = 0; i < 1; i+=0.01f)
{
   Color2 = new Color(i, 0.5f, 0.5f);

}
j'aimerai que ce soit pour toutes les valeurs soit new Color(i, j, k); par exemple. Et je n'arrive par a faire une boucle correcte avec le temps que je veux de changement

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: boules multicouleur a chaque tire

Message par EmileF » 13 Juil 2019 19:43

Tu pourrais peut-être calculer tes couleurs sous forme de random toutes les secondes.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

zula23
Messages : 11
Inscription : 13 Juil 2019 18:42

Re: boules multicouleur a chaque tire

Message par zula23 » 13 Juil 2019 19:52

Mais comment faire ca, une fonction simple qui change la couleur toutes les 1 seconde par exemple ? A la place du color.white; donc mettre un new Color( ... ) mais je n'ai aucune idée de comment faire apres pour que ce soit du rainbow et donc multicouleur toutes les 1 seconde

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: boules multicouleur a chaque tire

Message par EmileF » 13 Juil 2019 20:00

Hé bien:

Code : Tout sélectionner

	Color color = new Color(UnityEngine.random.range(0f,1f),UnityEngine.random.range(0f,1f),UnityEngine.random.range(0f,1f), 1f);
tu peux ajuster les valeurs des randoms pour forcer plus le rouge, le bleu ou le vert, si tu veux.

Pour le time toutes les secondes, il faudrait que je fasse des essais
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

zula23
Messages : 11
Inscription : 13 Juil 2019 18:42

Re: boules multicouleur a chaque tire

Message par zula23 » 13 Juil 2019 20:29

D'accord merci bien :), donc la si on ajoute le temps, cela changement les couleur a chaque fois ? ou j'ai besoin de faire une boucle quand meme ?

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: boules multicouleur a chaque tire

Message par EmileF » 13 Juil 2019 20:39

Si il faut que tu fasses une boucle pour appeler ta fonction toutes les secondes, ou tu peux utiliser une coroutine, qui s'executera toutes les secondes

https://docs.unity3d.com/Manual/Coroutines.html
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

zula23
Messages : 11
Inscription : 13 Juil 2019 18:42

Re: boules multicouleur a chaque tire

Message par zula23 » 13 Juil 2019 23:00

D'accord merci de l'aide je vais essayer ^^

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

Re: boules multicouleur a chaque tire

Message par boubouk50 » 15 Juil 2019 11:52

Tu as également la fonction InvokeRepeating () qui te permet de le faire directement.
En fait, c'est une coroutine qui sert de répétiteur, donc ce que tu t'apprêtes à programmer.
"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

Répondre

Revenir vers « Scripting »