Unity3D :从 C# 脚本管理 UI 资产引用

推荐:将NSDT场景编辑器就加入你的3D工具链
3D工具集:NSDT简石数字孪生

从 C# 脚本管理 UI 资产引用

Unity 在 C# 中将 UXML 文件表示为对象,在 C# 中将 USS 文件表示为对象。 由于 和 是常规的 Unity 资源,因此您可以使用 Unity 的标准工作流程来管理它们。VisualTreeAssetStyleSheetVisualTreeAssetStyleSheet

使用序列化引用

Unity 会自动检测 C# 脚本中类型为 或 的字段。您可以使用检查器来设定对项目中导入的特定 UXML 或 USS 文件的引用。即使资源在项目中的位置发生更改,此类引用仍然有效。VisualTreeAssetStyleSheet

有三种方法可以在脚本中使用它:

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

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

以下示例类从检查器接收 UXML 文件和 USS 文件列表:MonoBehaviour

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;
}

使用资产数据库(仅限编辑器)

可以使用资产数据库类按路径或 GUID 加载 UI 资产。

以下示例演示如何按路径查找资产:

VisualTreeAsset asset = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/main_window.uxml");
StyleSheet asset = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Editor/main_styles.uss");

使用可寻址对象

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

您可以将 UXML 和 USS 资产与可寻址系统一起使用。

有关如何为 Unity 中的任何资源设置可寻址对象的信息,请参阅可寻址对象入门。

使用资源文件夹

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

以下示例演示如何在资源文件夹中加载资产:

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

注意:此方法在工作流程和最终构建大小方面存在明显的缺点。Unity 建议您改用可寻址对象系统。

3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D :为自定义控件创建自定义样式 (mvrlink.com)

下一篇:Unity3D :画布 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号