关于Unity资源的动态加载与WWW的使用

第一次自己写博客,刚刚工作2年,还只算个新人,稍微把自己平常看的写一下,如果有不对,还请各位指导

资源动态加载有3种方式
Resource.Load()
AssetBundle
AssetDatabase

Resource.Load只能加载Resource下的文件目录
AssetDatabase 只能在Editor下使用

如果希望热更新资源 那么就需要使用AssetBundle
AssetBundle打包这里就不说了,不懂得上网查

那么如何得到AssetBundle?
使用WWW,这里有2个方法
一:WWW w = new WWW(Path);
通过new WWW从path地址下载资源从WWW.assetBundle中得到.
如果你只是希望相同版本下只下载一次,那么可以通过一些方法将WWW.bytes存在本地中,下次加载的时候可以 new WWW(从你自定义的位置中直接得到),不需要重新从网络中下载
private void SaveToPersistentPath(string path, byte[] bytes)
{
try
{
if (File.Exists(path))
File.Delete(path);

FileStream stream = new FileStream(path, FileMode.Create);
stream.Write(bytes, 0, bytes.Length);
stream.Flush();
stream.Close();
}
catch (System.Exception ex)
{
Debug.Log("Save to persistent path error: " + ex.Message);
}
}


二: WWW w = WWW.LoadFromCacheOrDownload(path, version)
同样是下载,在第一下载的过程中其实差不多,但是LoadFromCacheOrDownload下载完成后,会将资源直接存入缓存里面并将path作为该资源的标识符,
下次加载的时候会查找是否存在该path的标识符,如果存在,那么说明下载过了,接下来就是判断uint的version,如果传入的version>缓存中资源的version那么会重新从path下载,否则直接调用缓存里面的资源


比较:
new WWW(Path)与 WWW.LoadFromCacheOrDownload(path, version)相比
第一次下载的情况下LoadFromCacheOrDownload多了一个存入缓存的操作,相对上LoadFromCacheOrDownload比较慢(不算自己将资源写入本地这个操作)
但是第二次开始LoadFromCacheOrDownload直接从缓存中读取(相当于直接从内存中读)不会加载到内存中,所以说,第二次以后LoadFromCacheOrDownload的效率明显较高

但是使用new WWW(Path)后自己写入资源,可以自己管理下载的资源每次加载可以自己写方法判断资源是否还有用,是否可以清理掉
但是 LoadFromCacheOrDownload虽然会不断自动清理太久不动用的资源,但是不能自己控制




你可能感兴趣的:(关于Unity资源的动态加载与WWW的使用)