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

Posted

技术标签:

【中文标题】GUIStyle.hover 状态是不是适用于 Unity 编辑器标签(或除 Button 之外的其他控件)?【英文标题】:Does the GUIStyle.hover state apply to Unity Editor labels (or other controls besides Button)?GUIStyle.hover 状态是否适用于 Unity 编辑器标签(或除 Button 之外的其他控件)? 【发布时间】:2019-12-22 23:55:16 【问题描述】:

我正在 Unity 中创建自定义编辑器窗口。当鼠标悬停在标签上时,我希望标签更改颜色。要做到这一点,这似乎应该可行:

GUI.skin.label.hover.textColor = Color.red;
GUILayout.Label("My Label");

但是当我将鼠标悬停在标签上时,标签仍然正常显示。

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

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

【问题讨论】:

【参考方案1】:

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

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

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

简而言之,unity 具有用于内置 GUI 样式的特殊代码,这些样式具有悬停效果,当鼠标经过它们时会强制重绘。对于某些特殊样式,例如GUI.skin.button,这似乎以某种方式与normal 样式状态相关联。结果,没有自定义悬停背景的选项,任何需要自定义悬停文本颜色的东西都必须具有与内置按钮样式之一相同的背景图像。

【讨论】:

在我看来,这是统一的编辑器样式可扩展性中较大的漏洞之一。我很想看到它被修复,但可能整个 GUIStyle 系统都需要重新设计,所以我可以理解为什么它还没有修复。

以上是关于GUIStyle.hover 状态是不是适用于 Unity 编辑器标签(或除 Button 之外的其他控件)?的主要内容,如果未能解决你的问题,请参考以下文章

Android Linkify.addLinks() 适用于一个 textview 而不是另一个

谁能解释为啥这适用于类组件而不是功能组件?

网络--路由表&IP选路

服务器发送的事件是不是适用于 CORS?

共享 URL 类似于 Facebook.com/sharer/sharer.php?u= 但适用于 Houzz

怎么把U盘启动改为硬盘启动(适用于U盘安装系统时)