Version: 2021.1
Scripting with Assets
Streaming Assets

Загрузка ресурсов в реальном времени

В некоторых случаях полезно создать ассет, доступный для проекта без его загрузки в качестве части сцены. Например, там может быть персонаж или другой объект, который может появиться в любом месте игры, но который будет использоваться лишь изредка (это может быть “секретная” функция, сообщение об ошибке или предупреждение о рекордном счете). Кроме того, вы даже можете загрузить ресурс из отдельного файла или через URL, чтобы сократить время начального скачивания или добавить в проект взаимозаменяемый контент.

Unity поддерживает папки ресурсов в проекте (папки с названием Resources), чтобы разработчик мог добавить в сборку контент, который не будет загружен до того как понадобится. В Unity Pro, Unity iOS Advanced и Unity Android Advanced вы также можете создавать ассет бандлы. Это файлы, полностью отделённые от главной игры, которые содержат ассеты, к которым игра может получить доступ при необходимости, из файла или по URL.

Asset Bundles

An Asset Bundle is an external collection of assets. You can have many Asset Bundles and therefore many different external collections of assets. These files exist outside of the built Unity player, usually sitting on a web server for end-users to access dynamically.

Чтобы собрать ассет бандл, вы вызываете BuildPipeline.BuildAssetBundle() из Editor скрипта. В аргументах вы указываете массив __объектов __ для включения в бандл, и некоторые другие опции. Этот метод соберёт файл, который вы потом сможете динамически загружать в реальном времени с помощью AssetBundle.Load().

Папки ресурсов

Папки ресурсов содержат коллекции ассетов, которые включаются в проигрыватель, создаваемый Unity, но не обязательно связаны с каким-либо GameObject’ом в инспекторе.

Чтобы что-либо положить в папку ресурсов, достаточно просто создать в окне Project (Project View) новую папку с именем “Resources”. У вас может быть несколько папок ресурсов, размещённых в разных подпапках проекта. Когда вы пожелаете загрузить ассет из любой такой папки, вызовите метод Resources.Load().

Важно:

All assets found in the Resources folders and their dependencies are stored in a file called resources.assets. If an asset is already used by another level it is stored in the .sharedAssets file for that level. The Edit -> PlayerSettings First Streamed Level setting determines the level at which the resources.assets will be collected and included in the build.

If a level prior to “First streamed Level” is including an asset in a Resource folder, the asset will be stored in assets for that level. If it is included afterwards, the level will reference the asset from the “resources.assets” file.

Только ассеты из папки Resources могут быть загружены с помощью Resources.Load. Однако, многие другие ассеты могут оказаться в файле “resources.assets”, если они являются зависимостями ассетов из папок ресурсов (например, материал в папке Resources может ссылаться на текстуру вне этой папки).

Выгрузка ресурсов

You can unload resources of an AssetBundle by calling AssetBundle.Unload() or AssetBundle.UnloadAsync(bool). If you pass true for the unloadAllLoadedObjects parameter, both the objects held internally by the AssetBundle and the ones loaded from the AssetBundle using AssetBundle.LoadAsset() will be destroyed and memory used by the bundle will be released.

Иногда предпочтительнее загрузить AssetBundle, создать экземпляры интересующих вас объектов и освободить память, занимаемую уже ненужным вам ассет бандлом, при этом сохранив загруженные объекты. Это полезно для освобождения памяти для других задач, например, для загрузки другого AssetBundle. В таком случае, вам следует передать false в качестве аргумента. После уничтожения бандла вы более не сможете загружать из него объекты.

Если вы желаете уничтожить объекты в сцене, загруженные с помощью Resources.Load() до загрузки другого уровня, вызовите на них Object.Destroy(). Чтобы выгрузить ассеты, используйте Resources.UnloadUnusedAssets().

Scripting with Assets
Streaming Assets
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961