Загрузить 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;
}
Следующий пример EditorWindow класс получает из инспектора ссылки по умолчанию:
using UnityEditor;
using UnityEngine.UIElements;
public class MyWindow : EditorWindow
{
[SerializeField]
private VisualTreeAsset uxml;
[SerializeField]
private StyleSheet 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 вместо этого.
Дополнительные ресурсы
- Создание экземпляра UXML из сценариев C#
- Ссылка на другие файлы из UXML
- 📚 Документация: Addressables: Планирование и передовая практика