收集一些常见的UI优化手段和思路。当然,大部分是抄的,希望以后自己有能力总结。

Unity性能优化

优化关键

先找到性能瓶颈。影响图形性能的关键因素主要有一下几个方面。

  1. GPU填充率和存储器带宽。
  2. CPU经常是渲染物体的数量(也就是常常大家说的Draw Calls)。
  3. 系统内存容量也是优化的一个关键指标。

GPU优化

GPU优化主要有下面几点:

  1. 减少三角形的使用数量(去掉不必要的三角形面)。
  2. 尽量避免使用实时光照,能使用Static Lighting就使用烘焙光照,只计算一次。
  3. 压缩纹理和多重纹理-mipmap(这样可以提高加载速度和降低内存占用),也极大提高渲染的性能。
  4. LOD(多细节层次),不同距离使用不同精度的模型。
  5. 编写高性能着色器,将能能处理的逻辑放在定点着色器里面处理,减少片段着色器的计算量。

CPU优化

CPU主要开销在,显卡在渲染一个对象之前,CPU需要计算一些着色器和灯光影响,然后想显卡驱动发送绘制指令,单物体来说,不会太影响性能,累计就会产生性能问题。这里优化点主要从以下几个方面讨论,这里只是说出优化常用的方案,后面如果在下在项目里面遇到更加好的方案,或者是方法,我将会在这里补充出来。也欢迎大家指出错误,或者是更好的CPU优化方案。

  1. 合并材质球相同的对象,进而减少绘制指令的发送。合并的方式有,手工合并或者是使用Unity内置的选项合并,或者是使用自制脚本合并模型对象,但是注意的是:非相同材质对象,合并不会对性能有任何的提高。
  2. 在对象或场景中使用更少的材质。可以将独立的纹理合并成一个更大的纹理图集,但是合并时注意,合并要以方便开发,节省资源为基础。
  3. 避免使用物体被渲染多次的效果,这里主要体现在(反射,阴影,像素光照等)。
  4. 优化游戏代码,也是优化CPU的一个关键点。

内存优化

性能优化最后一点,就是内存的优化,要优化Unity的内存资源,就首先必须了解内存的资源管理模式,以及Unity资源加载的方式,Unity资源动态加载主要有下面两种方式:

  1. Resource方式资源加载。
  2. AssetBundle资源加载方式。

这两种资源加载方式都提供同步和异步加载API。资源加载到内存里面的规范到底是什么样的,观察下面的图就一目了然。