- Home /
Lerp Color doesn't work
Hey, I've made this script tho I'm having a little problem with it, doesn't change colors for some reason :/
public Color[] bgColors;
private float t = 0.05f;
private Renderer rend;
// Use this for initialization
void Awake()
{
rend = GetComponent<Renderer>();
}
void Start ()
{
Invoke ("changeColor", 1f);
}
// Update is called once per frame
void Update () {
}
void changeColor()
{
Debug.Log ("IM HERE");
Color.Lerp(rend.material.color, bgColors[Random.Range(0, bgColors.Length)],t);
Invoke ("changeColor", 1f);
}
Answer by DiegoSLTS · May 31, 2015 at 04:23 PM
First, If you don't change the value of "t" you'll always get the same color from Color.Lerp. Check again the documentation of Color.Lerp, the "t" value should go from 0 to 1 to get the proper transition: http://docs.unity3d.com/ScriptReference/Color.Lerp.html
Second, Lerp returns a color, it doesn't change the one you provided, so you have to use the returned color for something. Again, look at the docs.
Third, I don't understand what you're trying to do, but I guess you're also confused about the Invoke method.
If you want to lerp from one color to another and want the transition to last 1 second you have to update the color on every frame. Your "Invoke("changeColor",1f);" line calls the changeColor only once every second.
Also, you're changing the second color to a random color for the list on every call to that function, that would give really weird results.
I'll make a guess here, I think you want this code:
public Color[] bgColors;
private Renderer rend;
// Use this for initialization
void Awake()
{
rend = GetComponent<Renderer>();
}
void Start ()
{
StartCoroutine(changeColor());
}
IEnumerator changeColor()
{
Color startColor = rend.material.color;
Color endColor = bgColors[Random.Range(0, bgColors.Length)];
float t = 0f;
while(t <= 1f) {
rend.material.color = Color.Lerp(startColor,endColor,t);
t += Time.deltaTime;
yield return null;
}
StartCoroutine(changeColor());
}
Answer by maccabbe · May 31, 2015 at 04:25 PM
Color.Lerp(Color a, Color b, float t)
returns a new Color. To change one of the passed colors you have to assign to the passed color, i.e.
rend.material.color=Color.Lerp(rend.material.color, bgColors[Random.Range(0, bgColors.Length)],t);
Your answer
![](https://koobas.hobune.stream/wayback/20220613200501im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
lerp transparency back and forth, while cycling through rainbow? 0 Answers
How to make OnTriggerStay ColorLerp start all over again OnTrigger? 2 Answers
changes to colour alpha affect RGB values, but not in the same way 1 Answer
Lerp color of verts with position bigger than 1 1 Answer
Trouble with OnGUI and Update 3 Answers