【unity】关于AssetBundle的加载与卸载

http://blog.sina.com.cn/s/blog_80cc3d870101kxzb.htmlhtml

1、如何下载AssetBundle
   一、非缓存机制——经过建立一个WWW实例来对AssetBundle文件进行下载。下载后的AssetBundle文件将不会进入Unity引擎特定的缓存区。
   二、缓存机制——经过WWW.LoadFromCacheOrDownload接口来下载AssetBundle文件。下载后的AssetBundle文件将自动被存放在Unity引擎特定的缓存区内,该方法是Unity推荐的AssetBundle文件下载方式。(目前,对于发布到WebPlayer上的网页游戏,默认缓存大小为50MB;对于发布到PC上的客户端游戏和发布到iOS/Android上的移动游戏,默认缓存大小为4CB。
2、如何加载AssetBundle
算法

   一、WWW.assetBundle——能够经过WWW.assetBundle属性来建立一个AssetBundle文件的内存对象。
   二、AssetBundle.CreateFromFile——经过该接口能够从磁盘文件建立一个AssetBundle文件的内存对象。须要注意的是,该方法仅支持非压缩格式的AssetBundle,即在建立AssetBundle时必须使用UncompressedAssetBundle选项。
   三、AssetBundle.CreateFromMemory——经过该接口能够从内存数据流建立AssetBundle内存对象。例如,当用户对AssetBundle进行加密时,能够先调用解密算法返回解密后的数据流,而后经过AssetBundle.CreateFromMemory从数据流建立AssetBundle对象。
3、如何从AssetBundle中加载Assets
   一、AssetBundle.Load。
   二、AssetBundle.LoadAsync。
   三、AssetBundle.LoadAll。

4、如何从场景AssetBundle中加载Assets
缓存

   一、Application.LoadLevel。
   二、Application.LoadLevelAsync。
   三、Application.LoadLevelAdditive。
   四、Application.LoadLevelAdditiveAsync。
ide

5、AssetBundle内存管理
关于AssetBundle的加载与卸载
6、如何卸载AssetBundle
  一、AssetBundle.Unload接口。
7、如何卸载从AssetBundle中加载的Assets
  一、AssetBundle.Unload(true)。
    二、Resources.UnloadUnusedAssets()——该接口会卸载掉全部没有使用的Assets。须要强调的是,它的做用范围不只是当前的AssetBundle,而是整个系统,并且它也不能卸载掉从当前AssetBundle文件中加载的仍在使用的Assets。

8、如何卸载GameObject
   一、对于由CameObject.Instantiate接口实例化出的CameObject,Unity提供了CameObject.Destroy或CameObject.DestroyImmediate接口来将其卸载。Unity推荐使用CameObject.Destroy接口,若是使用该接口,Unity会将真正的删除操做延后到一个台适的时机统一进行处理,可是会在渲染以前进行。
9、WWW、AssetBundle及Asset的关系
加密

   一、关系图:
url

   关于AssetBundle的加载与卸载
   二、如图所示,WWW对象和经过WWW.assetBundle属性所加载的AssetBundle对象会对Web Stream数据持有引用,同时AssetBundle也会引用到从它所加载的全部Assets。值得一提的是,真正的数据都是存放在Web Stream数据中,如纹理、模型等,而WWW和AssetBundle对象只是一个结构指向了Web Stream数据。
   三、对于WWW对象自己,可使用www = null或WWW.Dispose()来进行卸载。两者的效果同样,只是www = null不会及时引发内存释放操做,而是在系统自动垃圾回收时进行释放;而WWW.Dispose()会及时调用系统的垃圾回收操做来进行内存释放。WWW对象释放后,其对于Web Stream数据的引用计数也会相应减1。
   四、对于Web Stream数据,其所占用的内存会在其引用计数为0时,自动被系统进行释放。如上图中,当AssetBundle对象以及WWW对象被释放后,Web Stream 数据所占用的内存也会被系统自动回收。
spa

相关文章
相关标签/搜索