一、资源加载管线
1. 管线(Pipeline)
使用管线来处理曾哥资源加载的流程,解耦了资源处理的流程。
①transformPipeline(Url路径转换管线) = parse(创建RequestItem) + replaceOverrideAsset(替换覆盖的资源) + combine(组合生成item.url)
②fetchPipeline(预加载管线) = transformPipeline(url路径转换) + fetch(下载资源文件)
③pipeline(正常加载管线) = transformPipeline(url路径转换) + loadOneAssetPipeline(下载资源文件 fetch、parse)
2.transformPipeline(Url路径转换管线)
①parse:为每个要加载的资源生成RequestItem对象,并初始化其资源信息(AssetInfo、uuid、cofig等)
②replaceOverrideAsset:会从assetOverrideMap中查看item的uuid,并替换覆盖资源
③combine:为每个RequestItem构建出真正的加载路径,这个加载路径最终会转换到item.url中
3.fetchPipeline(预加载管线)
①preprocess:交由transformPipeline执行
②fetch:用于下载资源文件,由packManager负责下载实现,fetch会将下载完的文件数据放到item.file中
4.pipeline(正常加载管线)
①preprocess:交由transformPipeline执行
②load:在loadOneAssetPipeline中执行每个子任务。(其中fetch阶段下载资源文件,parse用于加载完的资源文件转换成可用的资源对象)
5.资源优化
资源本身的压缩,纹理压缩,合并JSON,Zip压缩,在低端设备上,文件下载的并发数不能设置太高。
二、合批策略
1.静态合批
①将需要静态合批的静态模型放在同一个节点下,使用静态合批会将节点下的所有MeshRenderer里的Mesh合并成一个,并将其挂到另一个节点下。
操作方式:
a)材质和网格数据一致的静态模型节点,放置到同一节点下执行静态合批
b)通过代码调用BatchingUtility.batchStaticModel接口进行静态合批
2.GPU Instancing
①适用于大量顶点数据完全相同的动态模型的场景
②当启用后,绘制时会根据模型的材质和顶点数据分组,每个分组组织instanced attributes信息,然后一次性完成绘制
3.使用场景
①静态合批:确保材质统一的情况下,如果确认某些模型在游戏周期内完全静止不会变化,就可以使用静态合批。
②GPU Instancing:如果存在大量相同的模型重复绘制,相互间只有相对可控的小差异,就可以使用GPU Instancing。