Coroutine не играет всю дорогу - PullRequest
0 голосов
/ 23 апреля 2019

К сожалению, моя совместная рутина не проходит до конца.Предполагается, что объект исчезает, поэтому его альфа равен 0. Однако он постепенно исчезает до 0,039.

{
    StartCoroutine(colorlerpin7());
    yield return null;
}

public IEnumerator colorlerpin7()

{
    float ElapsedTime = 0.0f;
    float TotalTime = 1f;
    while (ElapsedTime < TotalTime)

    {
        //  fades out atipical
        ElapsedTime += Time.deltaTime;
        fluidpef.GetComponent<Renderer>().material.color = Color.Lerp(new 
        Color(1f, 1f, 1f, 1f), new Color(1f, 1f, 1f, 0f), (ElapsedTime / 
        TotalTime));
        yield return null;

    }
}

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Условие while заключается в том, что значение альфа не уменьшается до 0. ElapsedTime < TotalTime означает, что в вашем цикле ElapsedTime / TotalTime никогда не будет равно 1, что означает, что значение альфа не будет равно 0.

Чтобы решить эту проблему, я бы изменил условие, чтобы проверить альфа-значение материала:

public IEnumerator colorlerpin7()

{
    float ElapsedTime = 0.0f;
    float TotalTime = 1f;
    Renderer matRenderer =  fluidpef.GetComponent<Renderer>();
    while (matRenderer.material.color.a > 0.0f)

    {
        ElapsedTime += Time.deltaTime;
        matRenderer.material.color = Color.Lerp(new 
        Color(1f, 1f, 1f, 1f), new Color(1f, 1f, 1f, 0f), (ElapsedTime / 
        TotalTime);
        yield return null;

    }
}

1 голос
/ 23 апреля 2019

это выглядит как "правильное" поведение, поскольку ваш ElapsedTime будет больше, чем TotalTime, прежде чем вы получите альфа 0 (или значение lerp 1), например,

-> frame x ElapsedTime равно 0,97, ваше значение lerp равно 0,97.

-> frame x + 1 ElapsedTime может быть уже 1.1, поэтому вы будете выпрыгивать из цикла.

Просто добавьте этот код после цикла:

fluidpef.GetComponent<Renderer>().material.color = Color.Lerp(new 
    Color(1f, 1f, 1f, 1f), new Color(1f, 1f, 1f, 0f), 1);
...