J'ai trouvé assez difficile de trouver une solution à cela dans les documents Unity.
Color.Lerp(Color a, Color b, float t)
est une fonction qui modifie progressivement une couleur selon une étape t, lui donnant la valeur finale de la Couleur b.
Comment puis-je Lerp entre plusieurs couleurs l'une après l'autre?
Une approche qui peut être adoptée avec plusieurs transitions de couleurs consiste à tirer parti d'un dégradé .
En exposant une variable publique de ce type, un développeur peut utiliser l'inspecteur pour lancer l'éditeur de dégradé afin de concevoir un dégradé contenant un nombre quelconque de couleurs. Cet éditeur vous permet d'utiliser les sélecteurs de couleur de l'unité, de régler avec précision le placement des touches de couleur / alpha et de sauvegarder / charger les dégradés.
Une fois conçue, la
Gradient.Evaluate()
méthode acceptera un flotteur dans la plage 0-1 pour retourner la couleur appropriée.Malheureusement, l'API pour la construction par programme d'un dégradé n'est pas aussi élégante .
la source
C'est donc le code que j'ai fini par utiliser pour lerp entre trois couleurs à moi, j'espère que je serai utile à quiconque décide de le chercher.
la source
J'ai l'impression qu'il pourrait y avoir une meilleure solution. La seule raison pour laquelle je verrais passer de couleur en couleur est si vous vouliez changer continuellement la teinte ... http://en.wikipedia.org/wiki/Hue
Voici comment convertir HSV en RVB: http://en.wikipedia.org/wiki/HSL_and_HSV#From_HSV
Avec cela, vous pouvez utiliser les couleurs HSV, changer simplement la teinte, puis convertir en RVB. De plus, avec Color.Lerp, vous avez le problème de l'incohérence. Si vous passez de l'orange au jaune, puis au vert, vous constaterez que la couleur commence à devenir jaune très rapidement, puis commence à ralentir à l'approche du jaune, puis accélère à nouveau une fois qu'elle passe au jaune et passe au vert. Cela ralentira donc le changement de couleur à chaque point auquel vous vous attarderez. Je pense que changer la teinte serait beaucoup plus efficace - et à long terme, donnerait un meilleur effet. :)
la source
Que diriez-vous d'écrire votre propre version, qui exploite
Color.Lerp()
?Une version très simple qui prend 3 couleurs et place la seconde au milieu pourrait ressembler à ceci:
la source
Puisque vous n'avez pas dit ce que vous vouliez changer de couleur, je vais donner un vague exemple avec une couleur créée sur la méthode.
Le point est d'avoir une collection de couleurs, et une durée au total (comme sur l'exemple que je vais fournir) ou une durée entre chacune (c'est à vous de décider).
Personnellement, je n'interpole pas les choses sur Update que je sais que je n'interpolerai pas constamment (la caméra étant une exception), donc j'utilise des coroutines pour gérer cela.
Sur cet exemple, je divise la durée donnée sur l'inspecteur par la quantité de couleurs, puis je Lerp la couleur réelle de l'itérateur à la couleur de l'itérateur suivant, et la durée sera de la durée précédemment épissée. Voici l'exemple:
J'espère que cela aide.
la source