I’m trying to animate the appearance of a text block. I want the block color alpha to stop at 86% full alpha, and text color to stop at full alpha.
private IEnumerator Appear(GameObject go, float appearTime)
{
animating = true;
float colorAlpha = go.GetComponent<Image>().color.a;
float textAlpha = go.GetComponentInChildren<Text>().color.a;
float interpolator = 0;
while (animating)
{
interpolator += Time.deltaTime / appearTime;
colorAlpha = Mathf.Lerp(colorAlpha, 0.86f, interpolator);
textAlpha = Mathf.Lerp(textAlpha, 1, interpolator);
Color newBlockColor = go.GetComponent<Image>().color;
newBlockColor.a = colorAlpha;
Color newTextColor = go.GetComponentInChildren<Text>().color;
newTextColor.a = colorAlpha;
go.GetComponent<Image>().color = newBlockColor;
go.GetComponentInChildren<Text>().color = newTextColor;
if (interpolator >= 1)
{
animating = false;
break;
}
}
yield return null;
}
Maybe im making it more complicated? Compiler didn’t allow me to change color directly, cause its a struct. I also know there’s Color.Lerp() method. Is it better in any way?
You are using Lerp wrong.
Mathf.Lerp(start, end, ratio);
so it should be like this:
private IEnumerator Appear(GameObject go, float appearTime)
{
Image image = go.GetComponent<Image>();
Text text = go.GetComponentInChildren<Text>();
float interpolator = 0;
while (interpolator < 1)f
{
interpolator += Time.deltaTime / appearTime;
Color iCol = image.color;
iCol .a = Mathf.Lerp(image.color.a, 0.86f, interpolator);
image.color = iCol ;
Color tCol= text.color;
tCol.a = Mathf.Lerp(text.color.a, 1f, interpolator);
text.color = tCol;
yield return null;
}
}
For struct, you need to first store the value, modify it and pass it back. I guess this should work. I also remove some of animating variable and check as you can make it happen in the while check.