Trudno mi znaleźć rozwiązanie tego problemu w dokumentach Unity.
Color.Lerp(Color a, Color b, float t)
to funkcja, która stopniowo zmienia kolor zgodnie z krokiem t, nadając mu końcową wartość koloru b.
Jak mam Lerp między wieloma kolorami jeden po drugim?
Jednym z podejść, które można zastosować przy wielu przejściach kolorów, jest wykorzystanie gradientu .
Udostępniając publiczną zmienną tego typu, programista używa Inspektora do uruchomienia Edytora gradientów w celu zaprojektowania gradientu zawierającego dowolną liczbę kolorów. Ten edytor pozwala na korzystanie z selektorów kolorów jedności, dokładnego dostrojenia umiejscowienia klawiszy kolorów / alfa i zapisywania / ładowania gradientów.
Po zaprojektowaniu
Gradient.Evaluate()
metoda zaakceptuje liczbę zmiennoprzecinkową w zakresie 0-1, aby zwrócić odpowiedni kolor.Niestety interfejs API do programowego budowania gradientu nie jest tak elegancki .
źródło
Więc to jest kod, którego ostatecznie użyłem do lerpu między trzema kolorami, mam nadzieję, że przyda się każdemu, kto zdecyduje się tego poszukać.
źródło
Wydaje mi się, że może być lepsze rozwiązanie. Jedynym powodem, dla którego chciałbym przejść od koloru do koloru jest to, że chcesz ciągle zmieniać odcień ... http://en.wikipedia.org/wiki/Hue
Oto jak przekonwertować HSV na RGB: http://en.wikipedia.org/wiki/HSL_and_HSV#From_HSV
Dzięki temu możesz używać kolorów HSV, po prostu zmienić odcień, a następnie przekonwertować na RGB. Poza tym z Color.Lerp masz problem z niespójnością. Jeśli zmienisz kolor z pomarańczowego na żółty, a następnie na zielony, przekonasz się, że kolor zaczyna bardzo szybko zmieniać kolor na żółty, a następnie zaczyna zwalniać, gdy zbliża się do żółtego, a następnie przyspiesza ponownie, gdy przechodzi w żółty i przechodzi w zielony. Spowolni więc zmianę koloru w każdym punkcie, do którego się dążysz. Myślę, że zmiana odcienia byłaby o wiele bardziej skuteczna - i na dłuższą metę da lepszy efekt. :)
źródło
A może napiszesz własną wersję, która wykorzystuje
Color.Lerp()
?Bardzo prosta wersja, która przyjmuje 3 kolory i umieszcza drugą pośrodku, mogłaby wyglądać następująco:
źródło
Ponieważ nie powiedziałeś, na co chcesz zmienić kolor, podam niejasny przykład z kolorem stworzonym w metodzie.
Chodzi o to, aby mieć kolekcję kolorów i całkowity czas trwania (jak w przykładzie, który przedstawię) lub czas trwania między nimi (to zależy od ciebie).
Ja osobiście nie interpoluję rzeczy w aktualizacji , o których wiem, że nie będę ciągle interpolować (wyjątek stanowi kamera), więc używam do tego celu coroutines.
W tym przykładzie dzielę czas trwania podany na inspektorze przez liczbę kolorów, a następnie I Lerp rzeczywisty kolor iteratora do następnego koloru iteratora, a czas trwania będzie miał długość poprzednio połączoną. Oto próbka:
Mam nadzieję, że to pomoże.
źródło