项目:
头顶信息,科技树,换装
头顶信息:
2dUI做法
更新放在lateupdate之后
通过移除画布的方式隐藏
手动计算偏移量,不用layout组件
分区域布局
避免直接使用transform.position,缓存角色坐标
使用判断是否在视野范围内来判断是否更新
在一个job里面同时判断对象是否在视野范围内和把他的3d坐标转成2d坐标,计算这个角色的相关信息
判断是否在视野范围内:使用视口坐标判断,因为用六个面判断是主线程api
合批:逻辑关联,物理分层,文字层,图片层,特效层
如果要解决重叠问题,要自己处理深度测试
换装要求
骨骼要求:骨骼结构完全一致,空间位置零偏差,不同部分表现上同一位置的顶点收骨骼权重影响尽量相同(同一套基准骨骼(T-Pose))
零件贴图是按部位来规范固定大小(1024和512),合并后大图固定大小(2048)
贴图格式统一
算法:
装箱算法(先放大的再放小的) RectanglePacker库,存取骨骼层级使用的数据结构(字典)
UV 象限法的缺点:
空间浪费,精度死板,扩展性差
需要的工作:
动态生成basecolor的大图(根据优先级缩放贴图)
动态mask大图
动态法线大图
遮挡剔除,肚子被衣服挡住就剔除(合并时候剔除)
具体步骤:
1.加载各部位 SkinnedMeshRenderer
2.提取所有子 Mesh 的 CombineInstance(含顶点、UV)。
- 收集骨骼重映射的骨骼数组信息
4.合并颜色贴图,uv象限做法,固定uv分区
5.合并mesh,创建材质赋值新贴图
一定要自己创建材质吗
优化:
lod(动态选用的贴图大小)
固定贴图大小(预分配内存)
使用RenderTexture而不是texture
纹理压缩
缺点:
内存压力,合并贴图的计算压力
渲染基础:
mesh里面一个顶点应该是有切线,uv,法线的,只不过可以通过法线贴图来二次修改渲染时候使用的法线,没有法线贴图就是插值使用顶点的法线
renderer.material.mainTexture这个会生成一个新的材质,renderer.sharedMaterial这个不会
lua
Sprite.__index = Sprite的作用,"如果有人把我(Sprite)当成元表,且他在自己身上找不到某个东西,那就来我(Sprite)自己这里找。",没定义的话就算有元表也找不到
继承太多的耗时:table hash查找的耗时