如果AssetBundle打包使用的是自動分類养叛,而不是手工設(shè)置的方式,幾乎不可避免的是導(dǎo)致打出來的包會有循環(huán)引用凑兰。即使我們給美術(shù)制定了一系列的標準用來避免這種情況闹啦,但你懂的...
若AssetBundle有循環(huán)引用,在加載的時候會很麻煩色乾。那么我們就需要在制作階段能夠自動檢測到AssetBundle的循環(huán)引用誊册。并且給出提示,方便人工把循環(huán)引用給斷掉暖璧。
一般逼格比較高的方式是使用有向圖的閉環(huán)檢測算法來做案怯,但是我們農(nóng)村人哪里懂這個。這方法太高深玩不來澎办。
那就只能上土方法了
研究下AssetBundle的正常引用 關(guān)系和循環(huán)引用關(guān)系我們就能發(fā)現(xiàn):
在一個正常的AssetBundle引用關(guān)系中:
- 從任何一個AssetBundle出發(fā)嘲碱,往下走,任何方向都是一條斷頭路
- 從任何一個AssetBudnle出發(fā)局蚀,往上走麦锯,任何方向都是一條斷頭路
有這兩條,就可以得到推論:
遍歷所有AssetBundle琅绅,刪除掉沒有引用或沒有被引用的節(jié)點扶欣,最終將一個不剩。而如果有剩下奉件,那么這些剩下的AssetBundle一定是陷在循環(huán)中的宵蛀,或者是與循環(huán)中的AssetBundle有關(guān)聯(lián)的。
這里只是想把我的思考過程寫一下县貌。最終其實就是:模擬一次AssetBundle的加載术陶,如果都能加載完,那就不存在循環(huán)引用
- 刪除沒有引用的節(jié)點煤痕,就是模擬加載過程
- 刪除沒有被引用的節(jié)點梧宫,只是為了減少不在循環(huán)中接谨,但是被循環(huán)中的節(jié)點關(guān)聯(lián)的節(jié)點的數(shù)量
將剩余的AssetBundle輸出,就可以知道哪些是陷在環(huán)里了塘匣。
http://www.virtualhu.com/blog/?p=1