Unity 在 C# 中将 UXML 文件表示为 VisualTreeAsset 对象,在 C# 中将 USS 文件表示为 StyleSheet 对象。由于 VisualTreeAsset 和 StyleSheet 是 Unity 的常规资产,因此可以使用 Unity 的标准工作流程进行加载。
Unity 会自动检测 C# 脚本中 VisualTreeAsset 或 StyleSheet 类型的字段。您可以使用检视面板设置对项目中导入的特定 UXML 或 USS 文件的引用。即使资产在项目中的位置发生变化,此类引用仍然有效。
若要在脚本中使用此功能,共有三种方法:
| 描述 | 如何显示检视面板 | 引用保存位置 | |
|---|---|---|---|
自定义脚本的实例(例如 MonoBehaviour) |
选择包含脚本实例的游戏对象 | 在场景中 | |
派生自 EditorWindow 或 Editor
|
脚本的默认引用 | 在项目浏览器中选择实际的 C# 文件 | 在与脚本关联的元文件中 |
派生自 ScriptableObject
|
在项目浏览器中选择资产 | 在资产本身的序列化的数据中 |
注意:默认引用适用于所有派生自 MonoBehaviour 或 ScriptableObject 的脚本。它提供了一种为序列化脚本字段填充默认值的方法。
以下示例 MonoBehaviour 类从检视面板接收 UXML 文件和 USS 文件列表:
using UnityEngine;
using UnityEngine.UIElements;
public class MyBehaviour : MonoBehaviour
{
// Note that public fields are automatically exposed in the Inspector
public VisualTreeAsset mainUI;
[Reorderable]
public StyleSheet[] seasonalThemes;
}
以下示例 EditorWindow 类接收来自检视面板的默认引用:
using UnityEditor;
using UnityEngine.UIElements;
public class MyWindow : EditorWindow
{
[SerializeField]
private VisualTreeAsset uxml;
[SerializeField]
private StyleSheet uss;
}
您可以使用 AssetDatabase 类按路径或 GUID 加载__ UI__(即用户界面,User Interface)让用户能够与您的应用程序进行交互。Unity 目前支持三种 UI 系统。更多信息
See in Glossary 资产。
以下示例展示了如何按路径定位资产:
VisualTreeAsset uxml = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/main_window.uxml");
StyleSheet uss = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Editor/main_styles.uss");
以下示例展示了如何按路径从包中查找资产:
VisualTreeAsset uxml = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Packages/<name-of-the-package>/main_window.uxml");
StyleSheet uss = AssetDatabase.LoadAssetAtPath<StyleSheet>("Packages/<name-of-the-package>/main_styles.uss");
Addressables 系统提供了用于整理和打包应用程序内容的工具和脚本,以及用于在运行时加载和释放资产的 API。
您可以将 UXML 和 USS 资产与 Addressables 系统结合使用。
如需了解如何为 Unity 中的任何资产设置 Addressables,请参阅 Addressables 入门。
如果在项目中添加了 Resources 文件夹并将 UI 资产放入其中,则可以使用 Resources.Load 方法来加载资产。
以下示例展示了如何在 Resources 文件夹中加载资产:
VisualTreeAsset uxml = Resources.Load<VisualTreeAsset>("main_window");
StyleSheet uss = Resources.Load<StyleSheet>("main_styles");
注意:此方法会显著增加最终构建大小。如果您关心构建大小,请改用 Addressables。