关于AssetBundle的加载与卸载

来源:互联网 发布:驾考模拟软件 编辑:程序博客网 时间:2024/05/19 00:17
一、如何下载AssetBundle
   1、非缓存机制——通过创建一个WWW实例来对AssetBundle文件进行下载。下载后的AssetBundle文件将不会进入Unity引擎特定的缓存区。
   2、缓存机制——通过WWW.LoadFromCacheOrDownload接口来下载AssetBundle文件。下载后的AssetBundle文件将自动被存放在Unity引擎特定的缓存区内,该方法是Unity推荐的AssetBundle文件下载方式。(目前,对于发布到WebPlayer上的网页游戏,默认缓存大小为50MB;对于发布到PC上的客户端游戏和发布到iOS/Android上的移动游戏,默认缓存大小为4CB。
二、如何加载AssetBundle
   1、WWW.assetBundle
——可以通过WWW.assetBundle属性来创建一个AssetBundle文件的内存对象。
   2、AssetBundle.CreateFromFile——通过该接口可以从磁盘文件创建一个AssetBundle文件的内存对象。需要注意的是,该方法仅支持非压缩格式的AssetBundle,即在创建AssetBundle时必须使用UncompressedAssetBundle选项。
   3、AssetBundle.CreateFromMemory——通过该接口可以从内存数据流创建AssetBundle内存对象。例如,当用户对AssetBundle进行加密时,可以先调用解密算法返回解密后的数据流,然后通过AssetBundle.CreateFromMemory从数据流创建AssetBundle对象。
三、如何从AssetBundle中加载Assets
   1、AssetBundle.Load。
   2、AssetBundle.LoadAsync。
   3、AssetBundle.LoadAll。

四、如何从场景AssetBundle中加载Assets
   1、Application.LoadLevel。
   2、Application.LoadLevelAsync。
   3、Application.LoadLevelAdditive。
   4、Application.LoadLevelAdditiveAsync。
五、AssetBundle内存管理

六、如何卸载AssetBundle
   1、AssetBundle.Unload接口。
七、如何卸载从AssetBundle中加载的Assets
   1、AssetBundle.Unload(true)。
   2、Resources.UnloadUnusedAssets()——该接口会卸载掉所有没有使用的Assets。需要强调的是,它的作用范围不仅是当前的AssetBundle,而是整个系统,而且它也不能卸载掉从当前AssetBundle文件中加载的仍在使用的Assets。

八、如何卸载GameObject
   1、对于由CameObject.Instantiate接口实例化出的CameObject,Unity提供了CameObject.Destroy或CameObject.DestroyImmediate接口来将其卸载。Unity推荐使用CameObject.Destroy接口,如果使用该接口,Unity会将真正的删除操作延后到一个台适的时机统一进行处理,但是会在渲染之前进行。
九、WWW、AssetBundle及Asset的关系
   1、关系图:
   
   2、如图所示,WWW对象和通过WWW.assetBundle属性所加载的AssetBundle对象会对WebStream数据持有引用,同时AssetBundle也会引用到从它所加载的所有Assets。值得一提的是,真正的数据都是存放在WebStream数据中,如纹理、模型等,而WWW和AssetBundle对象只是一个结构指向了Web Stream数据。
   3、对于WWW对象本身,可以使用www = null或WWW.Dispose()来进行卸载。二者的效果一样,只是www =null不会及时引起内存释放操作,而是在系统自动垃圾回收时进行释放;而
WWW.Dispose()会及时调用系统的垃圾回收操作来进行内存释放。WWW对象释放后,其对于WebStream数据的引用计数也会相应减1。
    4、对于WebStream数据,其所占用的内存会在其引用计数为0时,自动被系统进行释放。如上图中,当AssetBundle对象以及WWW对象被释放后,WebStream数据所占用的内存也会被系统自动回收。
0 0
原创粉丝点击