Создав объект AssetBundle из загруженных данных, вы можете загрузить объекты, содержащиеся в нём, используя три различных метода:
AssetBundle.Load загрузит объект, используя его идентификатор имени в качестве параметра. Имя - то, которое видно в окне Project. Опционально можно передать тип объекта в качестве аргумента методу Load, чтобы убедиться, что загружаемый объект имеет определённый тип.
AssetBundle.LoadAsync работает так же как и метод Load, описанный выше, но этот не будет блокировать основной поток во время загрузки ассета. Это полезно при загрузке больших ассетов или множества ассетов сразу, чтобы избежать пауз в вашем приложении.
AssetBundle.LoadAll загрузит все объекты, содержащиеся в вашем AssetBundle. Как и в AssetBundle.Load, можно дополнительно фильтровать объекты по типу.
Используйте AssetBundle.Unload для выгрузки ассетов из памяти. Этот метод принимает boolean параметр, сообщающий Unity надо ли выгружать все денные (включая загруженные объекты ассетов), или только сжатые данные из скачанного бандла. Если ваше приложение использует некоторые объекты из AssetBundle и вы желаете освободить немного памяти, вы можете передать false, чтобы выгрузить из памяти только сжатые данные. Если же вы желаете полностью выгрузить из памяти всё, что было загружено из бандла, то следует передать true, чтобы уничтожились все ассеты, загруженные из AssetBundle.
Вы можете использовать метод асинхронной загрузки объектов AssetBundle.LoadAsync и снизить вероятность “подтормаживаний” в вашем приложении.
using UnityEngine;
// Note: This example does not check for errors. Please look at the example in the DownloadingAssetBundles section for more information
IEnumerator Start () {
while (!Caching.ready)
yield return null;
// Start a download of the given URL
WWW www = WWW.LoadFromCacheOrDownload (url, 1);
// Wait for download to complete
yield return www;
// Load and retrieve the AssetBundle
AssetBundle bundle = www.assetBundle;
// Load the object asynchronously
AssetBundleRequest request = bundle.LoadAssetAsync ("myObject", typeof(GameObject));
// Wait for completion
yield return request;
// Get the reference to the loaded object
GameObject obj = request.asset as GameObject;
// Unload the AssetBundles compressed contents to conserve memory
bundle.Unload(false);
// Frees the memory from the web stream
www.Dispose();
}