您可以写入 style
以将样式值设置为元素。但是,要获取元素的实际渲染样式,请从 resolvedStyle
读取。
在 C# 脚本中,您可以直接将样式设置为 视觉元素视觉树的节点,实例化或派生自 C# VisualElement
类。您可以设置外观样式、定义行为,并将其作为 UI 的一部分显示在屏幕上。 更多信息
参见 术语表 的 style
属性。例如,以下代码将按钮的背景颜色设置为红色
button.style.backgroundColor = Color.red
您还可以将 Unity 样式表 (USS) 添加到任何视觉元素。Unity 在 C# 脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。 更多信息
参见 术语表 中将 USS 文件表示为 StyleSheet
对象。
要将样式表添加到视觉元素
AssetDatabase.Load()
或 Resources.Load()
)加载 StyleSheet
对象。styleSheets
属性添加 StyleSheet
对象。例如,给定样式表在局部变量 styleSheet
中,元素在局部变量 element
中,以下示例将样式表添加到元素
element.styleSheets.Add(styleSheet);
注意:样式规则适用于视觉元素及其所有后代,但不适用于元素的父级或同级。对 USS 文件的任何更改都会自动刷新使用此样式表的 UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 术语表。
元素上的样式值是从各种来源计算得出的,包括多个应用的类、从祖先继承以及来自 UXML 或 C# 代码的内联样式。这些值可能会在帧与帧之间发生变化。style
仅保存元素的内联样式,不反映其他来源。resolvedStyle
具有最终计算的值,考虑当前帧上的所有来源。
例如,当您使用内联样式为元素设置高度时,style
和 resolvedStyle
都以相同的值开始。当元素添加到层次结构中时,resolvedStyle.height
可能为 NaN
,直到布局更新。如果您在类中将高度定义为百分比,则计算出的宽度依赖于父级属性,例如 border-height
和 padding
。虽然 style.height
可能会给出相对值(例如,对于可以更改值的转换),但 resolvedStyle.height
会给出实际渲染的高度。
要获取几何形状发生变化时的已解析样式,您可以使用 GeometryChangedEvent
事件。当 VisualElement 的布局发生变化时(包括大小和位置的变化)会触发此事件。您可以为此事件注册回调,并在回调中访问 VisualElement 的 resolvedStyle 属性以获取最终计算的样式。
以下示例创建一个自定义编辑器窗口并记录元素的已解析高度。如果调整窗口大小,则元素的高度会发生变化
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class ResolvedStyles : EditorWindow
{
[MenuItem("Window/UI Toolkit/ResolvedStyles")]
public static void ShowExample()
{
GetWindow<ResolvedStyles>();
}
private void OnEnable()
{
titleContent = new GUIContent("Resolved Styles");
}
public void CreateGUI()
{
VisualElement root = rootVisualElement;
// Element that is tracked.
// When you resize the Editor window, the inner content is not necessarily updated
// during the drag operation. The resolved height field is updated whenever the drag
// operation is complete.
var element = new VisualElement
{
style =
{
flexGrow = 1,
backgroundColor = Color.red
}
};
root.Add(element);
// Register a callback for the GeometryChangedEvent
element.RegisterCallback<GeometryChangedEvent>(OnGeometryChanged);
}
// Callback for the GeometryChangedEvent
public void OnGeometryChanged(GeometryChangedEvent evt)
{
// Get the VisualElement that triggered the event
VisualElement element = evt.target as VisualElement;
// Get the resolved style of the VisualElement
float height = element.resolvedStyle.height;
// Log the resolved of the VisualElement
Debug.Log("Resolved height: " + height);
}
}
如果元素的几何形状没有改变,您可以添加一个调度程序来定期检查元素的已解析样式
element.schedule.Execute(() =>
{
Debug.Log(element.resolvedStyle.height);
}).Every(100);