随着时间的推移,Unity淡化图像alpha

时间:2016-10-04 09:36:04

标签: c# unity3d

我想逐渐改变我的UI图像的alpha而不是立即改变。到目前为止,我的代码立即淡化我的图像的alpha如下

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; 

    }

}

上面的代码运行正常,但我正在努力修改我的代码,以便它不是立即执行,而是在一两秒内缓慢完成。我已尝试将行c.a = maxColor;更改为c.a--,以便查看图像是否会不断缓慢淡出,但alpha会立即下降。

我做错了什么?

2 个答案:

答案 0 :(得分:5)

使用Coroutine来实现此目的。像这样:

<强>淡出:

private YieldInstruction fadeInstruction = new YieldInstruction();
IEnumerator FadeOut(Image image)
{
    float elapsedTime = 0.0f;
    Color c = image.color;
    while (elapsedTime < fadeTime)
    {
        yield return fadeInstruction;
        elapsedTime += Time.deltaTime ;
        c.a = 1.0f - Mathf.Clamp01(elapsedTime / fadeTime);
        image.color = c;
    }
}
你可以这样使用它:

foreach (Image image in imagesToFade)
    StartCoroutine(FadeOut(image));

<强>淡入:

IEnumerator FadeIn(Image image)
{
    float elapsedTime = 0.0f;
    Color c = image.color;
    while (elapsedTime < fadeTime)
    {
        yield return fadeInstruction;
        elapsedTime += Time.deltaTime ;
        c.a = Mathf.Clamp01(elapsedTime / fadeTime);
        image.color = c;
    }
}

希望这有帮助

答案 1 :(得分:1)

您还可以使用像Dotween这样的补间引擎,然后只需使用它:

image.DOFade(1, 0.5f)

Dotween有很多帮助你的扩展方法,请参阅文档。 http://dotween.demigiant.com/documentation.php

DOColor(Color to, float duration) DOFade(float to, float duration)