Unity 6.3
0 онлайн 106 гостей 3 в системе
Вход
Ассеты и медиа Шаг 83 из 148

Введение в систему ресурсов

Система ресурсов предоставляет простой способ управления ассетами в памяти. Чтобы использовать систему ресурсов, создайте папку под названием Resources в вашем проекте и добавьте в неё ассеты. Во время процесса сборки Unity находит ассеты в папке Resources и объединяет их в сериализированный файл с метаданными и информацией об индексации. Затем вы можете использовать Resources API для загрузки и выгрузки ассетов в вашем приложении.

Тем не менее, постоянное наличие содержимого во время выполнения имеет значительное влияние на производительность вашего проекта, особенно если он содержит большое количество ассетов. Пакет Addressables обеспечивает лучший способ управления сложными наборами ассетов.

Это идеальная система для прототипирования или для небольших проектов, которым требуются ассеты на протяжении всего срока службы приложения.

Ограничения

Система ресурсов имеет следующие ограничения:

  • Ассеты в папках Resources всегда включаются в сборку Player, даже если на них ничто не ссылается. Это может привести к большим размерам сборки.
  • Если вам необходимо внести изменения в ассеты в вашем проекте, вам необходимо перестроить и переразвернуть все приложение, в то время как AssetBundles и Addressables позволяют создавать приростные обновления содержимого.
  • Он не поддерживает доставку контента с удаленного сервера.
  • Ассеты, загруженные с помощью Resources.Load, остаются в памяти до тех пор, пока не будут явно выгружены с помощью Resources.UnloadUnusedAssets, который выгружает все неиспользуемые ассеты, загруженные с помощью Resources, или до тех пор, пока сцена, которая их использовала, не будет выгружена.
  • Если в папке Resources находится много ресурсов, то сборка и запуск приложения может занять много времени.
  • Если ваш код загружает ассет по строке, но этот ассет отсутствует, то Resources.Load возвращает null и становится ошибкой выполнения, поэтому вам нужно вручную отслеживать, какие ассеты нужны.

Использование системы ресурсов

Система Resources может быть полезна в следующих ситуациях:

  • В небольших проектах, если содержание соответствует следующим критериям:
    • Она необходима на протяжении всего срока реализации проекта.
    • Это не памяти интенсивный.
    • Он не нуждается в патчах и не меняется в зависимости от платформы и устройства.
    • Он используется для минимального загрузки.

Примеры последнего включают MonoBehaviour singletons, используемые для размещения префабы, или ScriptableObject экземпляров, содержащих сторонние данные конфигурации, такие как Facebook App ID.

Последствия наличия большого количества ассетов для системы ресурсов

Рекомендуется избегать размещения большого количества контента в системе ресурсов по следующим причинам:

  • Это затрудняет управление памятью.
  • Помещение большого количества содержимого в папку Resources замедляет запуск приложения и увеличивает продолжительность сборки.
  • Система Resources затрудняет доставку пользовательского контента на конкретные платформы и препятствует постепенному обновлению контента.
  • Внесение изменений в ассеты в папке Resources требует перекомпиляции и повторного развертывания игрока, в то время как AssetBundles лучше подходит для постепенных обновлений контента.

Если вам нужно управлять содержимым через CDN, или делать регулярные обновления патчей, то AssetBundles и пакет Addressables являются рекомендуемой альтернативой. Вы также можете использовать прямые ссылки, если вам не нужны дополнительные возможности управления, которые предоставляет система Ресурсов.

Unity объединяет все объекты, на которые делается ссылка из ассетов в Resources папку в один серийный файл при создании проекта, подобно созданию одного большого AssetBundle. Unity требует времени для построения структур данных, которые индексируют все объекты в файле, и использует память пропорционально количеству объектов, даже если они не загружены. Это влияет на производительность, если количество индивидуальных ассетов в папках ресурсов большое, или если есть префабы Например, инициализация системы ресурсов, содержащей 10 тысяч ассетов, занимает несколько секунд на мобильных устройствах низкого класса, несмотря на то, что большинство объектов, содержащихся в папках ресурсов, редко требуются в первой сцене приложения.

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