我正在尝试编写一个函数,单击更改按钮的颜色会等待1秒钟,然后再次更改颜色
这是我写的:
smac[c]
它将颜色一次更改为(255,0,0,255)等待1秒,但不再将颜色更改为(255,128,128,255)。
所有Debug.Log均正确, 第一次调试是:RGBA(1.000,0.000,0.000,1.000) 第二个调试是:我回来了 第三次调试是:RGBA(1.000,0.502,0.502,1.000)
我该怎么办? :(
答案 0 :(得分:2)
问题是您将颜色分配给本地副本。 ColorBlock
是struct
,因此,将其分配给局部变量时将获得一个副本。为了对按钮产生影响,您需要将struct
重新分配回按钮。
IEnumerator DoTimer()
{
ColorBlock colors = DoBut.colors;
// now colors is a local copy, so all changes you do to it will not affect the button.
colors.normalColor = new Color32(255, 0, 0, 255);
// you need to assign it back to the button
DoBut.colors = colors;
yield return new WaitForSeconds(showForSeconds);
colors.normalColor = new Color32(255, 128, 128, 255);
// and again assign it back to the button
DoBut.colors = colors;
}
因此, structs
有点不直观。因此,如果您将来遇到类似的问题,请查看您是否在某处使用了struct
。当我开始使用Unity时,这对Vector3
等产生了很大的影响。
在相关说明中,ColorBlock
这件事似乎仅改变状态转换的颜色。因此,直接分配颜色可能不会立即影响按钮的颜色。
Unity论坛上有关于如何直接设置按钮颜色的thread(我刚刚从那里复制了相关部分):
DoBut.GetComponent<Image>().color = Color.red;