Загружать / выгружать активы динамически
Я должен управлять моей оперативной памятью, поэтому хочу загружать / выгружать все мои страницы 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.