如何更改GUI按钮突出显示的颜色

时间:2019-07-09 14:33:49

标签: c# unity3d

我想在按下按钮时更改GUI按钮的突出显示颜色。但是,我找不到如何在我的脚本onGUI()方法中进行更改。

我没有显示完整的代码。必要的部分如下。

这是onGUI()方法;

if-else检查按钮是否被单击。

if(GUI.Button(new Rect(currentPart.DrawDepth * spacing + x + subPartsSpacing, y, 200, 20), currentPart.EnglishTitle,myStyle))
{
    if (!currentPart.IsClicked)
    {
        currentPart.IsClicked = true;
        HumanBodyVisualizer.ShowMode showModeFullBody = HumanBodyVisualizer.ShowMode.Invisible;
        bodyVisualizer.ShowBody(showModeFullBody);

        AllSubPartsAndRoot.Insert(AllSubPartsAndRoot.Count, currentPart);
        addAllSubPartsOfClickButton(currentPart, AllSubPartsAndRoot, AllSubPartsAndRoot.Count - 1);
        HumanBodyVisualizer.ShowMode showModeCurrentPart = HumanBodyVisualizer.ShowMode.LowTransparent;

        for (int i = 0; i < AllSubPartsAndRoot.Count; i++)
        {
            bodyVisualizer.ShowBodyPart(showModeCurrentPart, AllSubPartsAndRoot[i]);
        }
    }
    else
    {
        currentPart.IsClicked = false;
        List<HumanBodyPart> RemoveBodyParts = new List<HumanBodyPart>();
        RemoveBodyParts.Insert(0,currentPart);
        addAllSubPartsOfClickButton(currentPart, RemoveBodyParts, 1);

        for(int i = 0; i < RemoveBodyParts.Count; i++)
        {
            if (AllSubPartsAndRoot.Contains(RemoveBodyParts[i]))
            {      
                bodyVisualizer.ShowBodyPart(HumanBodyVisualizer.ShowMode.Invisible, RemoveBodyParts[i]);
                AllSubPartsAndRoot.Remove(RemoveBodyParts[i]);
            }
        }

        if(AllSubPartsAndRoot.Count == 0)
        {
            bodyVisualizer.ShowBody(HumanBodyVisualizer.ShowMode.LowTransparent);
        }
        else
        {
            for (int ii = 0; ii < AllSubPartsAndRoot.Count; ii++)
            {
                bodyVisualizer.ShowBodyPart(HumanBodyVisualizer.ShowMode.LowTransparent, AllSubPartsAndRoot[ii]);
            }    
        }   
    }
}

1 个答案:

答案 0 :(得分:1)

您使用的是自定义GUIStyle

您可以通过onActive更改pressed样式

  

打开和按下元素时的渲染设置。

active

  

按下控件时的渲染设置。

GUIStyle

个组件

但是,您将需要在{p>

Texture2D

不幸的是,无法直接更改GUIStyle的颜色。


注意:为了更轻松地配置GUIStyle,您只需在ProjectView中创建资产→右键单击myStyle.onActive.background = SomeTexture2D; Create

通过检查器在此处进行所有设置,只需在EditorScript中引用此GUISkin资产并使用GUISkin


或者,您可以尝试使用按钮打开标志。

您可以使用Event.current并按顺序检查它是typeGUI.skin = myReferencedGuiSkin;还是mousePosition在用于按钮的EventType.MouseUp之外重置标志。 (虽然不确定这是否行得通)

rect

如果这是一个EditorWindow,则必须确保wantsMouseMove设置为private bool pressed; private bool hovered; ... public void OnGUI() { var color = GUI.color; var rect = new Rect(...); var ev = Event.current; hovered = ev.mousePosition.x > rect.x && ev.mousePosition.x < rect.x + rect.width && ev.mousePosition.y > rect.y && ev.mousePosition.y < rect.y + rect.height; if (Event.current.type == EventType.MouseUp) pressed = false; else if (ev.type == EventType.MouseDown) pressed = true; if (hovered && pressed) GUI.color = Color.green; if (GUI.Button(rect, ...)) { ... } GUI.color = color; // in order to receive the mouse events Repaint(); } 才能接收鼠标事件。

enter image description here