协程不会一直播放

时间:2019-04-23 12:14:25

标签: c# unity3d coroutine lerp

不幸的是,我的协同程序并没有完全播放。它应该淡入淡出一个对象,所以它的alpha为0。但是淡入到.039。

pandoc -t mediawiki --bibliography=allbooks.bib --csl=chicago-author-date.csl --metadata link-citations 1.tex -o 2.wiki

2 个答案:

答案 0 :(得分:1)

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

->帧x ElapsedTime为0.97,lerp值为0.97。

->帧x + 1的经过时间可能已经是1.1,所以您将跳出循环。

只需在循环后添加以下代码:

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

答案 1 :(得分:1)

while条件就是为什么alpha值不会减小到0的原因。ElapsedTime < TotalTime意味着循环ElapsedTime / TotalTime永远不会等于1,这意味着alpha值将不会等于1。不为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;

    }
}