虽然是ab包的卸载,但是这里把资源释放相关的几个类型和方式都总结下。
1、 释放实例化部分的内存资源
这类资源有个特点,就是都是使用Instaniate进行实例化出来。
(1)GameObject类,在程序运行时可以动态地加载和销毁释放(Destory),Destory由Unity本身直接管理,无法控制其销毁具体时机。
(2)非GameObject类的引用
Texture引用,shader引用,材质引用等。如果是单独实例化出来了,则属于非生命周期管理的内存,必须要手动进行卸载,用Destory(Texture)方式进行卸载。
2、释放虚拟机内存中的ab包资源所占用的内存
这类资源有个特点,就是都是使用AssetBundle.LoadAsset从ab包资源内存镜像创建出来。
Resources.UnloadUnusedAssets();//卸载未占用的asset资源
System.GC.Collect();//回收内存
3、释放运行内存中的ab包资源内存镜像内存
这类资源有个特点,是从硬盘或网络中下载后了ab包(此时还是压缩文件)后,使用AssetBundle.LoadFromFile创建出来。
使用AssetBundle.UnloadAllAssetBundles或AssetBundle.Unload进行卸载。
4、在移动环境下unity释放资源注意点
通常情况下做了场景切换后,上一个场景的所有东西都会进行一个卸载,这时候通常也可以进行一些内存类的释放操作,还有一类需要注意点的是。有些东西是DontDestory的,这时候如果是退出整个程序的操作则需要进行具体的置空,而且一些静态类也需要进行销毁。尤其是IOS的某个进程里有内置unity的情况,IOS调用Unity退出的时候要做这类操作,因为IOS这边是单进程的。安卓调用Unity退出,是直接杀死进程,调用的是Application.quit。
image.png
网友评论