为什么在统一编辑器窗口脚本中创建新的Color实例时,它没有更改为颜色?

时间:2019-07-04 20:53:10

标签: c# unity3d

void DrawItemBackgroundColor(Rect bgRect)
        {
            if (Event.current.type == EventType.Repaint)
            {
                Color oldColor = GUI.color;
                GUI.color = new Color(255, 182, 193);

                var rect = bgRect;
                rect.height = Styles.headerBackground.fixedHeight;
                Styles.headerBackground.Draw(rect, false, false, false, false);

                rect.y += rect.height;
                rect.height = bgRect.height - rect.height;
                Styles.background.Draw(rect, false, false, false, false);

                GUI.color = oldColor;
            }
        }

这应该将颜色更改为粉红色:

GUI.color = new Color(255, 182, 193);

但是它什么也没做。

但是,如果我在做:

GUI.color = Color.red; 

它将更改为红色,问题是“颜色”仅包含某些颜色,而并非所有颜色。

2 个答案:

答案 0 :(得分:1)

对于您的情况:

GUI.color = new Color(255f/255f, 182f/255f, 193f/255f);
  1. 颜色RGB值范围为0〜1
  2. Color32 RGB值范围是0〜255

因此您可以在0〜255之间使用Color32或在0〜1之间使用Color;

答案 1 :(得分:0)

解决方案是使用Color32:

void DrawItemBackgroundColor(Rect bgRect)
{
    if (Event.current.type == EventType.Repaint)
    {
        Color oldColor = GUI.color; 
        GUI.color = new Color32(255, 182, 193,100);

        var rect = bgRect;
        rect.height = Styles.headerBackground.fixedHeight;
        Styles.headerBackground.Draw(rect, false, false, false, false);

        rect.y += rect.height;
        rect.height = bgRect.height - rect.height;
        Styles.background.Draw(rect, false, false, false, false);

        GUI.color = oldColor;
    }
}

此行使它变为浅粉红色:

GUI.color = new Color32(255, 182, 193,100);