淡出和第四个Unity Image alpha

时间:2016-10-04 10:58:14

标签: c# unity3d ienumerable

我试图创造一种方式,如果我按下按钮,它会突出显示其他物体,同时褪色其他物体。我还有其他按钮可以淡化和突出显示不同的对象。其中一些可能已被第一个按钮修改。

我最初是以一种非常愚蠢的方式做到这一点

public void Highlight()
{
    foreach (Image image in imagesToHighlight)
    {
        Color c = image.color;
        if(c.a < maxColor)
        {
            c.a = maxColor;
        }

        image.color = c;
    }

    foreach (Image image in imagesToFade)
    {
        Color c = image.color;
        if(c.a > halfColor)
        {
            c.a = halfColor;
        }
        image.color = c; 
    }
}

这很有效,但我希望它能够逐渐发生,以提供更加平滑的过渡。通过将代码更改为:

,我设法让淡入淡出工作
IEnumerator Fade(Image image)
{
    float elapsedTime = 0.0f;
    Color c = image.color;
    while (elapsedTime < 1)
    {
        yield return fadeInstruction;
        elapsedTime += Time.deltaTime;
        c.a = 1.0f - Mathf.Clamp01 (elapsedTime / fadeTime);
        image.color = c;
    }
}

然后我在foreach循环中调用该方法,如下所示:

foreach (Image image in imagesToFade)
{
    StartCoroutine (Fade (image));
}

再次,这很好。我遇到的问题是检查图像是否褪色,如果它是并且需要突出显示,它会从淡入淡出值反转到高亮值(0.5到1.0)。

我认为这将是一个简单的改变,就像这个

IEnumerator HighLight(Image image)
{
    float elapsedTime = 0.0f;
    Color c = image.color;


    while (elapsedTime < 1 )
    {
        yield return fadeInstruction;
        elapsedTime += Time.deltaTime;

        c.a +=  Mathf.Clamp01 (elapsedTime / fadeTime);

        image.color = c;
    }
}

只需更改alpha线。但是,现在我的图像alphas跳转到高亮方法中的所有位置。我不知道如何解决这个问题。有人可以告诉我我做错了吗?

1 个答案:

答案 0 :(得分:0)

如果在Update函数中调用,

StartCoroutine将运行一次。您是否在Update函数中调用foreach循环?如果是这样,那么update会在每个帧中调用foreach,从而循环循环,这可能是为什么alpha遍地跳跃的原因