[Unity资源打包加载管理]

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

猜你喜欢

转载自www.cnblogs.com/cocotang/p/8963344.html