【Unity学习】Unity中的常见性能优化

遮挡剔除技术

对于不在摄像机拍摄范围内的对象,对这一对象的绘制是完全没有必要的,所以可以用到遮挡剔除技术

  1. 将静态物体勾选static
  2. 选择Windows->Occlusion Culling打开遮挡剔除窗口,单机Bake
  3. 修改bake界面的参数大小,可以修改Bake的单元的大小
  4. 单机Bake按钮进行烘焙
  5. 在场景右下方会出现Occlusion Culling下拉列表,选择Visualize便可以隐藏这些线条
  6. 之后便会发现在摄像机视野之外,这些对象将不会被绘制

注意:虽然不会被绘制,但是其他诸如物理引擎、唯一旋转放大等计算都是不受影响的。对于其他的优化这需要另行处理。

批处理技术

指的是Unity 3D内置的Draw Call Batching技术,这也无需开发人员参与,由U3D自动完成。
1. 如果多个对象使用了同一材质,U3D会一次性将这些对象的绘制信息一并传递给GPU
2. 但是如果缩放不统一,依然不能够进行批处理
3. 拥有Lightmap的对象由于多出了一个光照烘焙材质,也将不会进行批处理,应尽量避免
4. 接受了阴影的对象也不会进行批处理。使用了含有多个Pass着色器的对象也不会进行批处理。同时Unity3D向GPU传递的信息量是有限的,所以要避免使用定点过多的对象。
5. 以上都是动态批处理Dynamic Batching,而在IOS开发时,Unity3D还提供了静态批处理,即static Batching,更加节约资源,需要勾选Static参数

移动平台优化技巧

  1. 注意控制模型顶点的数量
  2. 避免在Update这类方法中不断调用GetComponent、Find、FindWithTag等API,建议在Awake和Start中声明和初始化该对象。
  3. 多使用整形而非浮点数
  4. 尽量避免使用GUILayout,尝试用脚本代替GUILayout
  5. 在Edit->Project Settings->Quality打开画质调整窗口,设置垂直同步等参数
  6. 用球形、胶囊、长方体碰撞体的组合来替代网格碰撞体
  7. 使用协同程序Coroutines来来模仿线程协同完成任务

猜你喜欢

转载自blog.csdn.net/qq_32418469/article/details/81321733