Unity UI 工具包:DropdownField 样式

Eld*_*mir 3 css unity-game-engine ui-toolkit

我正在使用 Unity 的新 UI 工具包实现表单视图,并且使用 UI 构建器来设计我自己的东西的样式很简单。没什么大不了的。

当谈到 Unity 的预构建“控件”时,UI 构建器中的样式非常有限。我可以在最外面的父级上设置一些样式,但是内部控件,我不能乱搞。

不过,我可以查看这些组件使用的类,并且可以通过简单地手动编辑 USS 文件来覆盖它们的规则。不知道为什么会有这个限制,但就这样吧。

但是,使用DropdownField,我可以毫不费力地设置输入和箭头等的样式,但我找不到实际下拉面板的类,并且我希望能够修复颜色、字体、大小等. 也是这样,所以看起来没那么糟糕

在此输入图像描述

查看 的源代码DropdownField,我可以找到一些在 UI 构建器中看不到的类名,但即使在向它们发送垃圾邮件 CSS 规则时,我似乎也没有找到正确的类名

来自 DropdownField.cs

internal static readonly string ussClassNameBasePopupField = "unity-base-popup-field";
internal static readonly string textUssClassNameBasePopupField = DropdownField.ussClassNameBasePopupField + "__text";
internal static readonly string arrowUssClassNameBasePopupField = DropdownField.ussClassNameBasePopupField + "__arrow";
internal static readonly string labelUssClassNameBasePopupField = DropdownField.ussClassNameBasePopupField + "__label";
internal static readonly string inputUssClassNameBasePopupField = DropdownField.ussClassNameBasePopupField + "__input";
internal static readonly string ussClassNamePopupField = "unity-popup-field";
internal static readonly string labelUssClassNamePopupField = DropdownField.ussClassNamePopupField + "__label";
internal static readonly string inputUssClassNamePopupField = DropdownField.ussClassNamePopupField + "__input";
Run Code Online (Sandbox Code Playgroud)

来自我的 USS 文件

.unity-base-popup-field {
    font-size: 42px;
}
.unity-base-popup-field__text {
    font-size: 42px;
}
.unity-base-popup-field__input {
    font-size: 42px;
}
.unity-base-popup-field__label {
    font-size: 42px;
}

.unity-popup-field {
    font-size: 42px;
}
.unity-popup-field__text {
    font-size: 42px;
}
.unity-popup-field__input {
    font-size: 42px;
}
.unity-popup-field__label {
    font-size: 42px;
}
Run Code Online (Sandbox Code Playgroud)

我不太确定如何从这里取得进展...有什么帮助找到我正在寻找的东西吗?或者我应该以不同的方式解决这个问题?

编辑:我忘记了这是堆栈溢出,我们会因为轻微的冒犯而被斩首,所以我拿出了一些有用的屏幕截图并复制到一些代码块中而不是/耸肩

Eld*_*mir 11

经过大量挖掘后,我自己设法解决了我的问题。完整的讨论在这里

对那些喜欢关闭所有内容而不是提供帮助的愤怒的 SO-Meta 编辑的免责声明:我已将照片附加到答案中。非常抱歉,但这是解释事物如何连接在一起的最具说明性的方式。答案中没有涉及代码。只是编辑参考。

我查看了 UI 调试器,可以看到 DropdownField 抽屉被实例化为层次结构中的全局元素,而不是任何 UXML 文档的子元素。我的所有 UXML 文档都引用了共享的 Menu.uss 文件的样式,但由于此抽屉成为根组件,因此它根本不从我的 USS 中读取。UI 调试器也证实了这一点。

我的 UXML:

在此输入图像描述

下拉抽屉:

在此输入图像描述

因此,在论坛上反复讨论后,我进行了挖掘,并找到了解决方案。

在运行时渲染 UI 的 UI Document 组件具有面板设置:

在此输入图像描述

面板设置有一个主题样式表:

在此输入图像描述

复制默认样式表并引用您复制的内容。然后在其中添加样式表,这将确保每个元素都采用样式:

在此输入图像描述

现在一切都按预期进行:

在此输入图像描述