我试图创造一种方式,如果我按下按钮,它会突出显示其他物体,同时褪色其他物体。我还有其他按钮可以淡化和突出显示不同的对象。其中一些可能已被第一个按钮修改。
我最初是以一种非常愚蠢的方式做到这一点
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跳转到高亮方法中的所有位置。我不知道如何解决这个问题。有人可以告诉我我做错了吗?
答案 0 :(得分:0)
StartCoroutine将运行一次。您是否在Update函数中调用foreach循环?如果是这样,那么update会在每个帧中调用foreach,从而循环循环,这可能是为什么alpha遍地跳跃的原因