统一C#更改按钮颜色等待1秒钟,然后再次更改颜色

时间:2019-12-17 17:58:13

标签: c# unity3d

我正在尝试编写一个函数,单击更改按钮的颜色会等待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)

我该怎么办? :(

1 个答案:

答案 0 :(得分:2)

问题是您将颜色分配给本地副本。 ColorBlockstruct,因此,将其分配给局部变量时将获得一个副本。为了对按钮产生影响,您需要将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;