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

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

public void Highlight() { foreach (Image image in imagesToHighlight) { Color c = image.color; if(ca  halfColor) { ca = halfColor; } image.color = c; } } 

上面的代码工作正常,但我正在努力修改我的代码,以便它不是立即执行,而是在一两秒内缓慢完成。 我试过改变行ca = maxColor; 为了看看图像是否会不断缓慢消失但是alpha会立即下降。

我究竟做错了什么?

使用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 ; ca = 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 ; ca = Mathf.Clamp01(elapsedTime / fadeTime); image.color = c; } } 

希望这可以帮助

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

image.DOFade(1, 0.5f)

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

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