zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    [整理]弦图学习笔记
    [整理]NOI Online 2021第一场题解
    [整理]Pólya 定理入门到入土
    [游记]2021省选抱灵记
    [整理]一些好玩的/板子的动态规划题目
    [整理]网络流随记——终(有关网络流的一些杂项)
    [整理][持续更新]多项式知识点大全(超简洁!)
    [洛谷P4338][题解][ZJOI2018]历史
    [游记]WC2021游记
    Codeforces Round #703 (Div. 2) (A~E)
  • 原文地址:https://www.cnblogs.com/cocotang/p/8963344.html
Copyright © 2011-2022 走看看