Achei bastante difícil encontrar uma solução para isso nos documentos do Unity.
Color.Lerp(Color a, Color b, float t)
é uma função que muda gradualmente uma cor de acordo com a etapa t, fornecendo o valor final da cor b.
Como faço para ler entre várias cores, uma após a outra?
Uma abordagem que pode ser adotada com várias transições de cores é alavancar um gradiente .
Ao expor uma variável pública desse tipo, um desenvolvedor pode usar o Inspector para iniciar o Editor de gradiente para criar um gradiente que contenha qualquer número de cores. Este editor permite usar os seletores de cores de unidade, ajustar o posicionamento das teclas de cores / alfa e salvar / carregar gradientes.
Uma vez projetado, o
Gradient.Evaluate()
método aceitará um flutuador no intervalo de 0 a 1 para retornar a cor apropriada.Infelizmente, a API para criar programaticamente um gradiente não é tão elegante .
fonte
Portanto, este é o código que acabei usando para lerp entre três cores minhas, espero que seja útil para quem decidir procurar por isso.
fonte
Sinto que pode haver uma solução melhor. A única razão pela qual eu veria ler de cor em cor é se você estava querendo mudar continuamente o matiz ... http://en.wikipedia.org/wiki/Hue
Veja como converter HSV para RGB: http://en.wikipedia.org/wiki/HSL_and_HSV#From_HSV
Com isso, você pode usar cores HSV, basta alterar a tonalidade e converter para RGB. Além disso, com o Color.Lerp, você tem o problema de inconsistência. Se você ler de laranja para amarelo e depois para verde, verá que a cor começa a amarelar muito rapidamente, depois começa a desacelerar à medida que se aproxima do amarelo e depois acelera novamente quando passa amarelo e fica verde. Assim, a cor mudará lentamente em todos os pontos em que você está lendo. Eu acho que mudar o tom seria muito mais eficaz - e, a longo prazo, dará um efeito melhor. :)
fonte
Que tal você escrever sua própria versão, que aproveita
Color.Lerp()
?Uma versão muito simples, que pega 3 cores e coloca a segunda no meio, pode ficar assim:
fonte
Como você não disse para o que queria mudar de cor, darei um exemplo vago com uma cor criada no método.
O ponto é ter uma coleção das cores e uma duração total (como no exemplo que fornecerei) ou uma duração entre cada uma (isso é com você).
Pessoalmente, não interpolo as coisas no Update que sei que não interpolarei constantemente (a câmera é uma exceção); portanto, uso corotinas para lidar com isso.
Neste exemplo, divido a duração fornecida no inspetor pela quantidade de cores e, em seguida, escrevo a cor real do iterador para a próxima cor do iterador, e a duração será a duração emendada anteriormente. Aqui está a amostra:
Espero que ajude.
fonte