【问题标题】:Coroutine does no play all the way through协程一直没有播放
【发布时间】:2019-09-12 15:03:04
【问题描述】:

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

    }
}

【问题讨论】:

    标签: c# unity3d coroutine lerp


    【解决方案1】:

    while 条件是 alpha 值不降至 0 的原因。ElapsedTime &lt; 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;
    
        }
    }
    
    

    【讨论】:

    • Color.Lerp 会帮你夹住。
    • Color.Lerp 钳制第三个参数,而不是颜色值,因此您的代码将获得与 OP 相同的结果。我认为他的问题不在于夹子。
    • 我更新了我的答案,很抱歉给您带来麻烦。如前所述,问题在于while 过早结束一帧。在这个答案中,我将条件更改为检查 alpha 值而不是 ElapsedTime
    【解决方案2】:

    这看起来像是“正确”的行为,因为您的 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);
    

    【讨论】:

    • 在这种情况下,您甚至不需要 Lerp 函数,您只需将值强制为 new Color(1f, 1f, 1f, 0f)
    • 是的,绝对的。
    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多