《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