协程不会一直播放

Coroutine does no play all the way through

不幸的是,我的合作例程并没有完全播放。它应该淡化一个对象,所以它的 alpha 为 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;

    }
}

这看起来像 "correct" 行为,因为在您达到 alpha 为 0(或 lerp 值为 1)之前,您的 ElapsedTime 将大于 TotalTime,例如

->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);

while 条件是 alpha 值不会减小到 0 的原因。ElapsedTime < TotalTime 意味着在您的循环中 ElapsedTime / TotalTime 永远不会等于 1,这意味着alpha 不会为 0.

为了解决这个问题,我会更改条件以检查 material:

的 alpha 值
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;

    }
}