Unity 6.3
0 онлайн 85 гостей 3 в системе
Вход

Загрузить UXML и USS в скрипт C#

Unity представляет файлы UXML как объекты VisualTreeAsset в C# и представляет файлы USS как объекты StyleSheet в C#. Поскольку VisualTreeAsset и StyleSheet являются обычными ассетами Unity, вы можете использовать стандартные рабочие процессы Unity для их загрузки.

Использование ссылок на сериализацию

Unity автоматически обнаруживает поля из ваших скриптов C#, которые являются типа VisualTreeAsset или StyleSheet. Вы можете использовать Inspector для установки ссылок на конкретные файлы UXML или USS, импортированные в ваш проект. Такие ссылки остаются действительными даже при изменении местоположения ваших ассетов в вашем проекте.

Есть три способа использования этого в ваших скриптах:

Описание Как отобразить Inspector Место сохранения ссылки
Экземпляры пользовательских скриптов (например, MonoBehaviour) Выберите GameObject, содержащий экземпляр скрипта Внутри сцены
Ссылки по умолчанию для скрипта, полученного из EditorWindow или Editor Выберите файл C# в браузере Project Внутри мета-файла, связанного со скриптом
Пользовательские ассеты в вашем проекте, которые происходят от ScriptableObject Выберите ассет в браузере Project Внутри серийных данных самого ассета

Примечание: Ссылки по умолчанию работают для всех скриптов, которые происходят от 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 exampleUI;
  public StyleSheet[] exampleStyle;
}
Окно Inspector показывает одиночный выборщик ссылок и список таблиц стилей (список пустой)
Окно Inspector показывает одиночный выборщик ссылок и список таблиц стилей (список пустой)

Следующий пример EditorWindow класс получает из инспектора ссылки по умолчанию:

using UnityEditor;
using UnityEngine.UIElements;

public class MyWindow : EditorWindow
{
  [SerializeField]
  private VisualTreeAsset uxml;
  [SerializeField]
  private StyleSheet uss;
}
В окне Inspector отображаются три справочных поля: View Data Dictionary, UXML и USS
В окне Inspector отображаются три справочных поля: View Data Dictionary, UXML и USS

Использование базы данных ассетов (только редактор)

Вы можете загрузить UI Assets по пути или GUID с помощью AssetDatabase class.

В следующем примере показано, как найти ресурс по пути:

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 с системой адресуемых объектов. Безкодовый способ использования адресуемых объектов заключается в создании префаб из компонента Документа UI, а затем добавить префаб в качестве адресуемого объекта.

Использование папки ресурсов

Если вы добавляете папку Resources в свой проект и помещаете в неё ваши UI ресурсы, вы можете использовать методы Resources.Load для загрузки ваших ресурсов.

В следующем примере показано, как загрузить ресурс в папку Resources:

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

Примечание: Этот метод значительно увеличивает окончательный размер сборки и время загрузки памяти, поскольку все файлы в Resources папки включены в сборку. Если вы обеспокоены по поводу этих папок, Addressables вместо этого.

Дополнительные ресурсы