0

不幸的是,我的协程并没有一直播放。它应该淡化一个对象,因此它的 alpha 为 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;

    }
}
4

2 回答 2

1

这看起来像是“正确”的行为,因为您的 ElapsedTime 将比 TotalTime 大,然后您将获得 0 的 alpha(或 1 的 lerp 值),例如

->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);
于 2019-04-23T12:32:49.073 回答
1

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

为了解决它,我将更改条件以检查材料的 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;

    }
}

于 2019-04-23T12:41:52.873 回答