我想在按下按钮时更改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]);
}
}
}
}
答案 0 :(得分:1)
您使用的是自定义GUIStyle
。
您可以通过onActive
更改pressed
样式
打开和按下元素时的渲染设置。
按下控件时的渲染设置。
GUIStyle
的个组件
但是,您将需要在{p>
Texture2D
不幸的是,无法直接更改GUIStyle的颜色。
注意:为了更轻松地配置GUIStyle,您只需在ProjectView中创建资产→右键单击→myStyle.onActive.background = SomeTexture2D;
→Create
通过检查器在此处进行所有设置,只需在EditorScript中引用此GUISkin
资产并使用GUISkin
或者,您可以尝试使用按钮打开标志。
您可以使用Event.current
并按顺序检查它是type
是GUI.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();
}
才能接收鼠标事件。