随着时间的推移,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)