AssetBundle打包方案主要基于以下几方面考虑:
- 资源的归类划分,方便资源加卸载
- 避免重复打包重复加载
- ab包粒度大小
AssetBundle打包时能够解决依赖关系。比如对Prefab A打ab包,会遍历所有引用到的资源,如果任一资源没有独立打包,那么该资源会被打进ab包中。基于以上考虑,我们在打包时首先对prefab分类设置打包,然后对于一些公用的资源设置独立打包。从加载特性和资源类型上来说,要设置ab打包的资源主要分为三大类:
归属明确的Prefab :
- audio --以单个音效为单位打包
- ui --以panel为单位打包,同个panel的ui prefab打进同一个ab包
- model --以单个卡牌为单位打包,关联音效动作打进同一个包
- skill --以单个技能为单位打包
公用资源:
- ui图集 ui prefab的公用资源
- 公用贴图打包 (特效会存在很多复用贴图,需要独立打包) ps:目前这个还没做
动态资源:
- 动态使用的ui prefab
- 动态使用的skill 相关prefab、model相关prefab、ui相关prefab
- panel公用的ui prefab --没有静态依赖的包依赖关系,划分为动态资源
对于归属明确的prefab,有比较明确的使用点,全部采用动态加载ab包的方式。对于公用资源,不需要主动加载,在加载ab包时,会通过引用关系加载引用到的公用资源ab包。对于动态资源,使用时间不明确,归属分散,资源量不大,目前采用预先加载的方式。
目前的打包方案是一步一步进化而来的,从加载和使用角度定制的方案,还不够统一和纯粹。比如对于不同类型的资源有不同的细节规则,这样就不好统一管理ab包和资源加卸载。另外并没有对所有资源进行打包,这样难免会造成部分公用资源重复打包和重复加载。未来希望能够继续对打包方案进行优化,有更加统一完整的方案。
目前我们项目Resource目录下还有一些场景加载用到的资源、以及一些字体资源,后面也考虑放到ab包,做到Resource目录比较干净。