GUIStyle.hover 状态是否适用于 Unity 编辑器标签(或除 Button 之外的其他控件)?

var*_*ian 5 c# unity-game-engine unity-editor

我正在 Unity 中创建一个自定义编辑器窗口。当鼠标悬停在标签上时,我想让标签改变颜色。为了实现这一点,这似乎应该有效:

GUI.skin.label.hover.textColor = Color.red;
GUILayout.Label("My Label");
Run Code Online (Sandbox Code Playgroud)

但是当我用鼠标悬停在标签上时,标签仍然正常显示,没有任何影响。

我也尝试过手动创建 GUIStyles 并将它们作为参数传递给 GUILayout.Label,结果相同。normal但是,如果我更改状态,我会看到颜色发生变化。

hover标签是否支持状态,如果不支持,它支持哪些控件以及我如何找到这些信息?Unity 的文档中似乎没有。

Sem*_*ono 1

GUI.skin.button如果您只对更改文本颜色感兴趣,您应该能够使用。

var myStyle = new GUIStyle(GUI.skin.button);
myStyle.hover.textColor = Color.red;
GUILayout.Label("My Label", myStyle);
Run Code Online (Sandbox Code Playgroud)

然而,这会带来副作用,即会影响按钮样式的所有其他品质。您的标签看起来像一个按钮。理论上,您可以更改所有样式状态的背景图像并使其看起来不像按钮,但对状态执行此操作normal会将悬停行为恢复为标签样式的行为。统一问答中的这个答案hover似乎是对为什么不起作用(至少不是通常)但又normal起作用的最有见地的解释active

简而言之,Unity 有专门的内置 GUI 样式代码,这些样式具有悬停效果,当鼠标经过它们时会强制重绘。这似乎在某种程度上与某些特殊样式的样式状态有关normal,例如GUI.skin.button. 结果,无法选择具有自定义悬停背景,并且任何需要具有自定义悬停文本颜色的内容都必须具有与内置按钮样式之一相同的背景图像。