Как изменить цвет подсветки кнопки GUI - PullRequest
0 голосов
/ 09 июля 2019

Я хочу изменить цвет подсветки кнопки GUI при нажатии кнопки. Тем не менее, я не вижу, как я могу изменить в моем методе Script 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 Ответ

1 голос
/ 09 июля 2019

Вы используете пользовательский GUIStyle.

Вы можете изменить стиль pressed с помощью onActive

Настройки рендеринга, когдаэлемент включается и нажимается вниз.

и active

Настройки рендеринга при нажатии на элемент управления.

компонентов GUIStyle

Но вам понадобится Texture2D для него в

myStyle.onActive.background = SomeTexture2D;

к сожалению, нет никакого способадля непосредственного изменения оттенка цвета GUIStyle.


Примечание. Чтобы упростить настройку GUIStyle, вы можете просто создать ресурс в ProjectView → , щелкнуть правой кнопкой мыши CreateGUISkin

Сделайте все свои настройки здесь через Инспектора и просто укажите этот актив GUISkin в вашем EditorScript и используйте GUI.skin = myReferencedGuiSkin;


В качестве альтернативы вы можете попробовать и использоватькнопка для включения флага.

Вы можете использовать Event.current и проверить, является ли он typeEventType.MouseUp или mousePosition находится за пределами rect, который вы используете для кнопки для сброса флага.(Не уверен, что это будет работать, хотя)

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();
}

Если это окно EditorWindow, вы должны убедиться, что wantsMouseMove установлено в true, чтобы получать события мыши.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...