开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

首页   >   博客   >   默言晨曦

AssetBundle的内存问题

个人分类: Unity优化 | 2017-4-21 13:22

关于AssetBundle的加载与卸载

  (2014-04-15 11:14:20)
标签: 

unity

 

assetbundle

 

unity3d

分类: Unity
一、如何下载AssetBundle
    1、非缓存机制——通过创建一个WWW实例来对AssetBundle文件进行下载。下载后的AssetBundle文件将不会进入Unity引擎特定的缓存区。
    2、缓存机制——通过WWW.LoadFromCacheOrDownload接口来下载AssetBundle文件。下载后的AssetBundle文件将自动被存放在Unity引擎特定的缓存区内,该方法是Unity推荐的AssetBundle文件下载方式。(目前,对于发布到上的网页游戏,默认缓存大小为50MB;对于发布到PC上的客户端游戏和发布到iOS/上的移动游戏,默认缓存大小为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的加载与卸载
六、如何卸载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、关系图:
    关于AssetBundle的加载与卸载
    2、如图所示,WWW对象和通过WWW.assetBundle属性所加载的AssetBundle对象会对Web Stream数据持有引用,同时AssetBundle也会引用到从它所加载的所有Assets。值得一提的是,真正的数据都是存放在Web Stream数据中,如纹理、模型等,而WWW和AssetBundle对象只是一个结构指向了Web Stream数据。
    3、对于WWW对象本身,可以使用www = null或WWW.Dispose()来进行卸载。二者的效果一样,只是www = null不会及时引起内存释放操作,而是在系统自动垃圾回收时进行释放;而
WWW.Dispose()会及时调用系统的垃圾回收操作来进行内存释放。WWW对象释放后,其对于Web Stream数据的引用计数也会相应减1。
    4、对于Web Stream数据,其所占用的内存会在其引用计数为0时,自动被系统进行释放。如上图中,当AssetBundle对象以及WWW对象被释放后,Web Stream 数据所占用的内存也会被系统自动回收。
0 0

作者的其他最新博客

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册帐号

个人分类

标签

阅读排行

评论排行

推荐博客

最新博客

返回顶部