Version: Unity 6.0 (6000.0)
语言 : 中文
引用 UXML 的其他文件
从 C# 脚本实例化 UXML

加载 UXML 和 USS C# 脚本

Unity 在 C# 中将 UXML 文件表示为 VisualTreeAsset 对象,在 C# 中将 USS 文件表示为 StyleSheet 对象。由于 VisualTreeAssetStyleSheet 是 Unity 的常规资产,因此可以使用 Unity 的标准工作流程进行加载。

使用序列化引用

Unity 会自动检测 C# 脚本中 VisualTreeAssetStyleSheet 类型的字段。您可以使用检视面板设置对项目中导入的特定 UXML 或 USS 文件的引用。即使资产在项目中的位置发生变化,此类引用仍然有效。

若要在脚本中使用此功能,共有三种方法:

描述 如何显示检视面板 引用保存位置
自定义脚本的实例(例如 MonoBehaviour 选择包含脚本实例的游戏对象 在场景中
派生自 EditorWindowEditor 脚本的默认引用 在项目浏览器中选择实际的 C# 文件 在与脚本关联的元文件中
派生自 ScriptableObject 在项目浏览器中选择资产 在资产本身的序列化的数据中

注意:默认引用适用于所有派生自 MonoBehaviourScriptableObject 的脚本。它提供了一种为序列化脚本字段填充默认值的方法。

以下示例 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

Addressables 系统提供了用于整理和打包应用程序内容的工具和脚本,以及用于在运行时加载和释放资产的 API。

您可以将 UXML 和 USS 资产与 Addressables 系统结合使用。

如需了解如何为 Unity 中的任何资产设置 Addressables,请参阅 Addressables 入门

使用 Resources 文件夹

如果在项目中添加了 Resources 文件夹并将 UI 资产放入其中,则可以使用 Resources.Load 方法来加载资产。

以下示例展示了如何在 Resources 文件夹中加载资产:

VisualTreeAsset uxml = Resources.Load<VisualTreeAsset>("main_window");
StyleSheet uss = Resources.Load<StyleSheet>("main_styles");

注意:此方法会显著增加最终构建大小。如果您关心构建大小,请改用 Addressables

引用 UXML 的其他文件
从 C# 脚本实例化 UXML