[Unity資源打包加載管理]


《1》ab的打包5.X以上打包ab已經很方便了,打包方案:貼圖,大圖單獨打包成一個ab,材質單獨打,shader單獨打,動畫文件單獨打,預設單獨打,一個圖集(1024*1024大小)打包成一個ab

《2》ab的加載與管理

1:ResMgr 游戲上層調用
       member:
                   getObj(name,objType,callBack<string,bool,obj>);//獲取gameObject objType=池子類型
                   desObj(obj);//銷毀gameObject

2:PoolMgr 管理所有對象池
       member:
                   Dict<string,BasePool> pools;//所有池子

                  getObj(name,poolType,callBack);//獲取gameObject poolType=池子生命周期類型 時間池,管卡池,全局池
                   desObj(obj);//回收gameObject

3:BasePool 管理所有gameobject 派生modelPool,uipool...
       member:
                    string name;//池子名稱
                    GameObjct tempObj;//模版obj
                    E_PoolType pType;//池子生命周期類型
                    List<GameObjct> objLst;//緩存obj
                    List<callBack> loadHandler;//加載回調
                    List<string> depends;//依賴關系

                   getObj(callBack);//沒有模版 添加一個LoaderTask,有模版 緩存lst>0 從緩存lst取 lst==0 用模版實例化,加載中有其他地方取obj,添加handler回調
                   saveObj(poolObj);//回收一個obj 沒有掛載PoolObj的不會進入池子 在poolMgr層直接銷毀

4:LoaderMgr 負責檢測加載隊列,進行加載
         member:
                  Dict<string,LoaderTask> tasks;//加載隊列

                  addTask(name,callBack<string,bool,TBundle>);//添加一個加載任務 會獲取所有依賴 先添加依賴bundle加載任務(遞歸把最深的依賴放到隊列前面),如果有這個任務 加載LoaderTask.addhandler(callBack)
                  onTick();//遍歷加載隊列 上一個加載完畢 加載下一個

5:LoaderTask 負責真實加載
         member:
                  addhandler(callBack<string,bool,TBundle>);//添加一個加載回調
                  IEnumerator load();//協程加載 如果AssetMgr.isHave()有bundle緩存 直接回調,如果沒有則AssetBundle.LoadFromFileAsync做一個異步加載,加載完畢緩存到AssetMgr

6:AssetMgr 管理AB
         member:
                  Dict<string, TBundle> bundlePool;//bundle列表

                  onTick();//檢查ab上次使用時間 過期unload(bool) bool是否用引用計數
                  isHave();//是否包含
                  getBundle();//獲取bundle
                   addBundle();//添加bundle
                  releaseRef();//減少refCount
                  addRef();//增加refCount
                  disposeBundle();//釋放bundle
7:TBundle 封裝一次AB
          member:
                  AssetBundle ab;
                  RefCount count;

                  onDispose();

 

Github:https://github.com/tianjiuwan/ECS_XLua

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM