Unity网络交互丨AssetBundle(三):AssetBundle的内存优化
1、卸载AssetBundle:
AssetBundle.Unload
详细介绍见:地址
2、卸载从AssetBundle加载的Assets:
对于懂AssetBundle加载的Assets,比如纹理、材质、音频片段和动画片段有以下两种方式卸载
a、AssetBundle.Unload(true)
b、Resources.UnloadUnusedAssets()
该接口会卸载掉所有没有使用的Assets,需要注意的是:
1)、它的作用范围不仅仅是当前的AssetBundle,而是整个系统
2)、它不能卸载从当前AssetBundle文件中加载的仍在使用的Assets
3、卸载实例化出的GameObject
对于由GameObject.Instantiate实例化出来的GameObject,有以下两种卸载方式
a、GameObject.Destroy(推荐)
b、GameObject.DestroyImmediate
4、卸载Web Stream
WWW对象和WWW.assetbundle属性所加载的AssetBundle对象会被Web Stream数据持有引用,
AssetBundle也会引用到从他所加载的所有Assets,
WWW和AssetBundle对象只是一个结构指向了Web Stream数据,
真正的数据都是存放在Web Stream数据中,例如纹理、模型。
1)、对于WWW对象本身,使用的方法有两种:
a、www=null
不会即时引起内存释放操作,而是在系统自动垃圾回收时进行释放
b、WWW.dispose
会即时调用系统的垃圾回收操作来进行内存释放 。WWW对象释放后,其对于Web stream数据的引用计数也会相应减1
2)、对Web Stream数据,其所占用的内存会在其引用计数为0时,自动被系统进行释放。
如下图所示,即当AssetBundle对象(WWW.assetbundle)和WWW对象释放后,Web Stream数据所占的内存也会被系统自动回收