Загружать / выгружать активы динамически

Я должен управлять моей оперативной памятью, поэтому хочу загружать / выгружать все мои страницы ngui на лету. Для этого я создал AssetBundle с префабами и сохраню эти AssetBundles в своем apk

Какой способ загрузить / выгрузить их на устройстве Android.

Я примерно знаю о AssetBundle.CreateFromMemory, но не могу его реализовать

Я правильно думаю или что-то упустил.

любая помощь/??

1 ответ

Я думаю, что вы на правильном пути. Unity поддерживает Resource Folders в проекте, что позволяет передавать контент в основной файл игры, но не загружать его до запроса. В Unity Pro, Unity iOS Pro(ранее называвшейся "iOS Advanced") и Unity Android Pro(ранее называвшейся "Android Advanced") вы также можете создавать пакеты активов. Это файлы, полностью отделенные от основного файла игры, которые содержат ресурсы, к которым игра может получить доступ по запросу из файла или URL-адреса.

Asset Bundle это внешняя коллекция активов. У вас может быть много пакетов активов и, следовательно, много разных внешних коллекций активов. Эти файлы существуют за пределами встроенного плеера Unity и обычно находятся на веб-сервере для динамического доступа конечных пользователей.

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

Вы можете выгрузить ресурсы AssetBundle, вызвав AssetBundle.Unload(), Если вы передадите true для параметра unloadAllLoadedObjects, оба объекта будут храниться внутри AssetBundle и те, загруженные из AssetBundle, используя AssetBundle.Load() будет уничтожен, а память, используемая пакетом, будет освобождена.

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

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

Прочитайте всю историю в документах Unity.

Другие вопросы по тегам