Мне было довольно сложно найти решение этой проблемы в документах Unity.
Color.Lerp(Color a, Color b, float t)
является функцией, которая постепенно меняет цвет в соответствии с шагом t, давая ему окончательное значение цвета b.
Как мне перебрать несколько цветов один за другим?
Один из подходов, который можно использовать с несколькими цветовыми переходами, заключается в использовании градиента .
Предоставляя общедоступную переменную этого типа разработчику, используйте инспектор для запуска редактора градиентов, чтобы создать градиент, содержащий любое количество цветов. Этот редактор позволяет вам использовать палитры цветов «единство», точную настройку цветовых / альфа-клавиш и сохранять / загружать градиенты.
После разработки
Gradient.Evaluate()
метод примет плавающее значение в диапазоне 0-1, чтобы вернуть соответствующий цвет.К сожалению, API для программного построения градиента не так элегантен .
источник
Так что это код, который я использовал для переключения между моими тремя цветами, я надеюсь, что он пригодится всем, кто решит поискать это.
источник
Я чувствую, что может быть лучшее решение. Единственная причина, по которой я хотел бы перейти от цвета к цвету, это то, что вы хотели постоянно менять оттенок ... http://en.wikipedia.org/wiki/Hue
Вот как конвертировать HSV в RGB: http://en.wikipedia.org/wiki/HSL_and_HSV#From_HSV
При этом вы можете использовать цвета HSV, просто изменить оттенок, а затем преобразовать в RGB. Кроме того, с Color.Lerp у вас есть проблема несоответствия. Если вы переключитесь с оранжевого на желтый, а затем на зеленый, вы обнаружите, что цвет начинает очень быстро становиться желтым, затем начинает замедляться по мере приближения к желтому, а затем снова ускоряется, когда становится желтым и становится зеленым. Так что это будет замедлять изменение цвета в каждой точке, к которой вы приближаетесь. Я думаю, что изменение оттенка будет гораздо более эффективным - и в долгосрочной перспективе даст лучший эффект. :)
источник
Как насчет того, чтобы написать свою собственную версию, которая использует
Color.Lerp()
?Очень простая версия, которая принимает 3 цвета и помещает второй прямо посередине, может выглядеть так:
источник
Поскольку вы не сказали, на что хотите изменить цвет, я приведу смутный пример с цветом, созданным для метода.
Суть в том, чтобы иметь коллекцию цветов и общую продолжительность (как в примере, который я приведу) или продолжительность между каждым (это на ваше усмотрение).
Лично я не интерполирую при обновлении вещи, которые, как я знаю, не будут интерполироваться постоянно (камера - исключение), поэтому я использую сопрограммы для этого.
В этом примере я делю длительность, заданную в инспекторе, на количество цветов, а затем я перетаскиваю фактический цвет итератора к следующему цвету итератора, и длительность будет иметь продолжительность, ранее сращенную. Вот образец:
Надеюсь, это поможет.
источник