How to make two colors lerp independently in this code?

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.