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数据所占的内存也会被系统自动回收

Unity网络交互丨AssetBundle(三):AssetBundle的内存优化