AssetBundle打包方案主要基于以下幾方面考慮:
- 資源的歸類劃分,方便資源加卸載
- 避免重復打包重復加載
- ab包粒度大小
AssetBundle打包時能夠解決依賴關系。比如對Prefab A打ab包,會遍歷所有引用到的資源,如果任一資源沒有獨立打包,那么該資源會被打進ab包中。基于以上考慮,我們在打包時首先對prefab分類設置打包,然后對于一些公用的資源設置獨立打包。從加載特性和資源類型上來說,要設置ab打包的資源主要分為三大類:
歸屬明確的Prefab :
- audio --以單個音效為單位打包
- ui --以panel為單位打包,同個panel的ui prefab打進同一個ab包
- model --以單個卡牌為單位打包,關聯(lián)音效動作打進同一個包
- skill --以單個技能為單位打包
公用資源:
- ui圖集 ui prefab的公用資源
- 公用貼圖打包 (特效會存在很多復用貼圖,需要獨立打包) ps:目前這個還沒做
動態(tài)資源:
- 動態(tài)使用的ui prefab
- 動態(tài)使用的skill 相關prefab、model相關prefab、ui相關prefab
- panel公用的ui prefab --沒有靜態(tài)依賴的包依賴關系,劃分為動態(tài)資源
對于歸屬明確的prefab,有比較明確的使用點,全部采用動態(tài)加載ab包的方式。對于公用資源,不需要主動加載,在加載ab包時,會通過引用關系加載引用到的公用資源ab包。對于動態(tài)資源,使用時間不明確,歸屬分散,資源量不大,目前采用預先加載的方式。
目前的打包方案是一步一步進化而來的,從加載和使用角度定制的方案,還不夠統(tǒng)一和純粹。比如對于不同類型的資源有不同的細節(jié)規(guī)則,這樣就不好統(tǒng)一管理ab包和資源加卸載。另外并沒有對所有資源進行打包,這樣難免會造成部分公用資源重復打包和重復加載。未來希望能夠繼續(xù)對打包方案進行優(yōu)化,有更加統(tǒng)一完整的方案。
目前我們項目Resource目錄下還有一些場景加載用到的資源、以及一些字體資源,后面也考慮放到ab包,做到Resource目錄比較干凈。