当把AssetBundle文件从服务器下载到本地后,需要将其加载到内存中并创建AssetBundle内存对象。
unity提供了四种方式来加载AssetBundle文件。
1.WWW.assetBundle属性
可以通过WWW.assetBundle属性创建一个assetBundle文件的内存对象,代码如下:
IEnumerator Start()
{
WWW www = WWW.LoadFromCacheOrDownload("www.songshizhao.com", 5);
yield return www;
if (www.error!=null)
{
Debug.Log(www.error);
yield break;
}
AssetBundle myloadedAssetBundle = new AssetBundle();
}
2.AssetBundle.CreateFromFile
完整定义为,public static AssetBundle CreateFromFile(string path);
从磁盘文件读取对象,该方法只支持非压缩格式的AssetBundle,即打包时必须使用非压缩选项。
3.AssetBundle.LoadFromMemoryAsync
通过该接口可以创建一个异步的内存区域比如用户对AssetBundle进行加密时,可以先调用解密算法返回解密后的数据流,然后再通过AssetBundle.CreateFromMemory从数据流中创建AssetBundle对象。示例代码如下:
IEnumerator Start()
{
//开始下载
WWW www = WWW.LoadFromCacheOrDownload("www.songshizhao.com", 5);
//等待下载完成
yield return www;
if (www.error != null)
{
Debug.Log(www.error);
yield break;
}
//从bytes数组中创建AssetBundle
AssetBundleCreateRequest assetBundleCreateRequest = AssetBundle.LoadFromMemoryAsync(www.bytes);
yield return assetBundleCreateRequest;
AssetBundle assetBundle = assetBundleCreateRequest.assetBundle;
}
4.AssetBundle.LoadFromMemory
IEnumerator Start()
{
//开始下载
WWW www = WWW.LoadFromCacheOrDownload("www.songshizhao.com/nullexample.unity3d", 5);
//等待下载完成
yield return www;
if (www.error != null)
{
Debug.Log(www.error);
yield break;
}
//从bytes数组中创建AssetBundle
AssetBundle assetBundle= AssetBundle.LoadFromMemory(www.bytes);
}
--------------------------------------------------------------------
需要注意的是,如AssetBundle之间存在依赖关系,需要先加载总的Manifest文件,通过manifest文件加载对应的依赖文件,然后再获得AssetBundle内存对象。