我正在Unity中创建自定义编辑器窗口。 我想让标签在鼠标悬停在其上时更改颜色。 要实现这一点,这似乎应该有效:
GUI.skin.label.hover.textColor = Color.red;
GUILayout.Label("My Label");
但是当我将鼠标悬停在标签上时,标签仍然正常显示,没有任何效果。
我还尝试手动创建 GUIStyles,并将它们作为参数传递给 GUILayout.Label,结果相同。 但是,如果我更改normal
状态,我会看到颜色发生变化。
标签是否支持hover
状态,如果不支持,它支持哪些控件,以及如何找到此信息? Unity 的文档似乎没有它。
如果您只对更改文本颜色感兴趣,您应该能够使用GUI.skin.button
。
var myStyle = new GUIStyle(GUI.skin.button);
myStyle.hover.textColor = Color.red;
GUILayout.Label("My Label", myStyle);
但是,这具有采用按钮样式的所有其他品质的副作用。您的标签看起来像一个按钮。理论上,您可以更改所有样式状态的背景图像,使其看起来不像按钮,但对normal
状态执行此操作会将悬停行为恢复为标签样式的行为。Unity Q&A 中的这个答案似乎是最有见地的解释,解释了为什么hover
不起作用(至少通常不起作用(,但normal
和active
起作用。
简而言之,unity 具有用于内置 GUI 样式的特殊代码,这些样式将鼠标悬停在效果上,当鼠标经过它们时会强制重绘。这似乎以某种方式与某些特殊样式的normal
样式状态捆绑在一起,例如GUI.skin.button
.结果,没有自定义悬停背景的选项,任何需要自定义悬停文本颜色的内容都必须具有与内置按钮样式之一相同的背景图像。