要點(diǎn):
當(dāng)場景中的object被移除后避诽,Unity不會(huì)自動(dòng)的卸載相關(guān)Asset
Asset卸載清理是特定的時(shí)刻觸發(fā)阵具,也可以手動(dòng)觸發(fā)
在合適的時(shí)刻卸載AB很重要讲逛,否則有可能會(huì)導(dǎo)致Asset冗余构拳,也有可能導(dǎo)致Asset丟失引用
AssetBundle.Unload(bool)
卸載AB對(duì)象頭信息(header information)
是否卸載通過此AB實(shí)例化的Asset
AssetBundle.Unload(true)
卸載實(shí)例化的Asset掠哥,如果其中某些Asset被場景引用压固,則會(huì)出現(xiàn)丟失
通過這種方式球拦,資源卸載最徹底,完全從內(nèi)存移除
即使代碼中有引用此資源帐我,也會(huì)被移除
使用場景:
a. 建議大多數(shù)時(shí)間使用此接口坎炼,避免出現(xiàn)Asset冗余
b. 在場景切換時(shí)調(diào)用,以清理舊場景的資源
AssetBundle.Unload(false)
斷開AB與其Asset之間的關(guān)聯(lián)(危險(xiǎn))
并不會(huì)卸載其Asset拦键,所以引用不會(huì)丟失谣光,同時(shí)Asset還會(huì)繼續(xù)占用內(nèi)存
由于AB斷開了與其Asset之間的關(guān)聯(lián),所以再次從AB實(shí)例化Asset時(shí)芬为,并不會(huì)直接返回以前初例化過的Asset萄金,而是重新實(shí)例化蟀悦。這就出現(xiàn)了冗余,同樣的Asset氧敢,內(nèi)存中出現(xiàn)了兩份日戈!
使用場景:
a. 不建議使用
b. 在場景與代碼中移除相關(guān)Asset的引用,執(zhí)行Unload(false)孙乖,之后再執(zhí)行Resources.UnloadUnusedAssets浙炼。
c. 執(zhí)行Unload(false)后,切換場景(non-additively)唯袄。
Resources.UnloadUnusedAssets
- 卸載不在被引用的Asset
- 如果Asset仍被AssetBundle引用鼓拧,則不會(huì)卸載
- 如果Asset被場景引用,則不會(huì)卸載
- 如果Asset被代碼引用越妈,則不會(huì)卸載
- 調(diào)用消耗較大,一般建議調(diào)用前先調(diào)用AssetBundle.Unload接口
- 在切換場景(非Addtively)钮糖,引擎會(huì)自動(dòng)調(diào)用