Ich fand es ziemlich schwierig, in den Unity-Dokumenten eine Lösung dafür zu finden.
Color.Lerp(Color a, Color b, float t)
ist eine Funktion, die eine Farbe gemäß einem Schritt t allmählich ändert, um den endgültigen Wert der Farbe b zu erhalten.
Wie kann ich nacheinander zwischen mehreren Farben wechseln?
Ein Ansatz, der mit mehreren Farbübergängen verwendet werden kann, ist die Verwendung eines Verlaufs .
Durch Offenlegen einer öffentlichen Variablen dieses Typs kann ein Entwickler im Inspektor den Verlaufseditor starten, um einen Verlauf mit einer beliebigen Anzahl von Farben zu entwerfen. In diesem Editor können Sie die Unity-Farbwähler verwenden, die Platzierung der Farb- / Alphatasten fein abstimmen und Farbverläufe speichern / laden.
Nach dem
Gradient.Evaluate()
Entwerfen akzeptiert die Methode einen Gleitkommawert im Bereich 0-1, um die entsprechende Farbe zurückzugeben.Leider ist die API zum programmgesteuerten Erstellen eines Verlaufs nicht so elegant .
quelle
Das ist also der Code, mit dem ich zwischen meinen drei Farben hin- und herschlenderte. Ich hoffe, ich kann jedem von Nutzen sein, der sich dafür entscheidet, danach zu suchen.
quelle
Ich habe das Gefühl, dass es eine bessere Lösung geben könnte. Der einzige Grund, warum ich sehen würde, von Farbe zu Farbe zu wechseln, ist, wenn Sie den Farbton kontinuierlich ändern möchten ... http://en.wikipedia.org/wiki/Hue
So konvertieren Sie HSV in RGB: http://en.wikipedia.org/wiki/HSL_and_HSV#From_HSV
Hiermit können Sie HSV-Farben verwenden, einfach den Farbton ändern und dann in RGB konvertieren. Außerdem besteht bei Color.Lerp das Problem der Inkonsistenz. Wenn Sie von orange nach gelb und dann nach grün wechseln, werden Sie feststellen, dass die Farbe sehr schnell nach gelb wechselt und sich langsam verlangsamt, wenn sie sich gelb nähert. Sobald sie gelb übergeht und nach grün wechselt, wird sie wieder schneller. So verlangsamt sich der Farbwechsel an jedem Punkt, zu dem Sie lerpen. Ich denke, eine Änderung des Farbtons wäre viel effektiver - und würde auf lange Sicht eine bessere Wirkung erzielen. :)
quelle
Wie wäre es, wenn du deine eigene Version schreibst, die nutzt
Color.Lerp()
?Eine sehr einfache Version, die drei Farben hat und die zweite genau in die Mitte legt, könnte so aussehen:
quelle
Da Sie nicht angegeben haben, in was Sie die Farbe ändern möchten, werde ich ein vages Beispiel mit einer nach dieser Methode erstellten Farbe geben.
Es geht darum, eine Sammlung der Farben und eine Gesamtdauer (wie in dem von mir angegebenen Beispiel) oder eine Dauer zwischen den einzelnen Farben zu haben (das liegt bei Ihnen).
Ich persönlich interpoliere keine Dinge auf Update , von denen ich weiß, dass ich nicht ständig interpoliere (Kamera ist eine Ausnahme), daher verwende ich Coroutinen, um das zu handhaben.
In diesem Beispiel dividiere ich die im Inspector angegebene Dauer durch die Anzahl der Farben, und dann lerpiere ich die tatsächliche Iteratorfarbe zur nächsten Iteratorfarbe, und die Dauer entspricht der zuvor gespleißten Dauer. Hier ist das Beispiel:
Ich hoffe es hilft.
quelle