雖然是ab包的卸載,但是這里把資源釋放相關(guān)的幾個(gè)類型和方式都總結(jié)下。
1、 釋放實(shí)例化部分的內(nèi)存資源
這類資源有個(gè)特點(diǎn),就是都是使用Instaniate進(jìn)行實(shí)例化出來。
(1)GameObject類,在程序運(yùn)行時(shí)可以動(dòng)態(tài)地加載和銷毀釋放(Destory),Destory由Unity本身直接管理,無法控制其銷毀具體時(shí)機(jī)。
(2)非GameObject類的引用
Texture引用,shader引用,材質(zhì)引用等。如果是單獨(dú)實(shí)例化出來了,則屬于非生命周期管理的內(nèi)存,必須要手動(dòng)進(jìn)行卸載,用Destory(Texture)方式進(jìn)行卸載。
2、釋放虛擬機(jī)內(nèi)存中的ab包資源所占用的內(nèi)存
這類資源有個(gè)特點(diǎn),就是都是使用AssetBundle.LoadAsset從ab包資源內(nèi)存鏡像創(chuàng)建出來。
Resources.UnloadUnusedAssets();//卸載未占用的asset資源
System.GC.Collect();//回收內(nèi)存
3、釋放運(yùn)行內(nèi)存中的ab包資源內(nèi)存鏡像內(nèi)存
這類資源有個(gè)特點(diǎn),是從硬盤或網(wǎng)絡(luò)中下載后了ab包(此時(shí)還是壓縮文件)后,使用AssetBundle.LoadFromFile創(chuàng)建出來。
使用AssetBundle.UnloadAllAssetBundles或AssetBundle.Unload進(jìn)行卸載。
4、在移動(dòng)環(huán)境下unity釋放資源注意點(diǎn)
通常情況下做了場(chǎng)景切換后,上一個(gè)場(chǎng)景的所有東西都會(huì)進(jìn)行一個(gè)卸載,這時(shí)候通常也可以進(jìn)行一些內(nèi)存類的釋放操作,還有一類需要注意點(diǎn)的是。有些東西是DontDestory的,這時(shí)候如果是退出整個(gè)程序的操作則需要進(jìn)行具體的置空,而且一些靜態(tài)類也需要進(jìn)行銷毀。尤其是IOS的某個(gè)進(jìn)程里有內(nèi)置unity的情況,IOS調(diào)用Unity退出的時(shí)候要做這類操作,因?yàn)镮OS這邊是單進(jìn)程的。安卓調(diào)用Unity退出,是直接殺死進(jìn)程,調(diào)用的是Application.quit。
