Unity编辑器创建资源优化 场景

unity编辑器创建资源优化

  1. 场景中非必要放在父节点下的就不要放,看上去简单一些,逻辑清晰一些,还有就是transform.Find查找效率。尽可能多的构建蓝色节点。DontDestroyOnLoad节点下不要有太多声明周期太长或者引用资源过多的复杂节点。需要经常访问的节点分配Tag,静态节点要添加Static标记。
  2. 嵌套预制体,更好管理,美术制作更容易合理分配uv和贴图,方便做LOD,修改方便,场景遮挡剔除好做。不过会增加材质数量和Drawcall,不太适合大规模远景对象。预制体变体(Prefab Variant)不能改变本体层级,不能删除本体对象,但可以通过Deactive达到同样效果,不要把这些变化应用到本体上去了。本质上变体是本体的一个实例。
  3. UGUI,UI性能问题:Canvas Re—batch(合批)时间长,次数多,顶点生成时间长,UIshader中GPU片元着色器利用率过高。合批过程:根据深度排序,检查覆盖关系,检查材质并合批。Canvas下的UI元素要是保证在之后每帧中都保持不变,那么久只需要合批一次,之后的每一帧都会调用这个结果。反之如果Canvas就要重新匹配几何体,Canvas也被标记成Dirty,触发Re-batch。
    在这里插入图片描述
    在Canvas Re-batch中完成。用来重新计算Layout布局与渲染网格重建。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    滚动视图Scroll View是性能问题大头,是个容器,需要大量实例化子对象空间,优化方式:RectMask2d组件裁剪,对象池作为实例化缓存。
  4. 物理:Layer层级的碰撞设置。Auot Sync Transforms在修改Transform时强制进行一次物理计算。Reuse Collision Callbacks开始时物理碰撞回调可以重复使用。Broadphase TypeUnity使用 Sweep And Prune Broadphase,这会沿着一个轴排序物体然后检查每对物体是否分离。当在一个平坦的世界中有大量物体时,这个方法就显得效率较低,因为它会产生很多的False positive即错误的正向判断,这会增加后面的Narrow phase的压力。此时建议将Broadphase Type设置为 Automatic Box Pruning,这个选项会使用网格来将物体分组,在网格内部仍然是使用sweep-and-prune,并且该选项会自动计算世界边界和网格划分的数量。另外一个选项Multibox Pruning Broadphase就是手动挡了,需要自己设置世界边界尺寸和网格划分。Collider

在这里插入图片描述
任何物理查询如果返回多个对象实例,就需要在堆上分配这些对象,这最终会导致GC。为了降低GC的消耗,一般来说是建议使用Non Allocating版本的物理查询方法。使用预先分配的collider数组,而不是每次都重新分配collider的实例。NonAlloc方法会填充所有的collider到数组中,直到数组满,因此需要设置足够大的数组,或者如果你并不关心所有的collider,那么设置数组容量到你关心的数量即可。
在这里插入图片描述
5. 动画: Animator更新流程,白色部分是操作回调,灰色部分是关键步骤。State machine update 动画状态机状态更新;ProcessGraph动画切片采样和计算根骨骼计算;ProcessAnimation计算动画图混合结果;WriteTransform将所有动画变换写入场景对象;WriteProperties将属性写入。
在这里插入图片描述 在这里插入图片描述
Playable API以一套树形结构来组织数据源,并允许用户通过脚本来创建和播放自定义的行为,支持与动画系统、音频系统等其他系统交互,是一套通用的接口。在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43685296/article/details/127449478