Unity3D性能优化 (五)——UI

时间:2022-01-04 19:40:09

一、DrawCall优化
①UI层级
Unity3D性能优化 (五)——UI

Unity3D性能优化 (五)——UI

Unity3D性能优化 (五)——UI

三张图对比发现场景中UI的数目一样,布局有变化,导致了其DrawCall数目不一样。当出现重叠时,会影响空间拓扑关系,从而影响了Unity对DrawCall的优化。
所以UI布局时,同一深度的UI(Item)不要出现重叠。

Unity3D性能优化 (五)——UI

Unity3D性能优化 (五)——UI
在实际应用中如背包系统,上面两张图由于第一张的Image偏大,导致DrawCall的增加

②精灵打包
Unity3D性能优化 (五)——UI

Unity3D性能优化 (五)——UI
通过设置PackingTag,将同一类型的Icon设置为相同的PackingTag,系统就会把这些Icon打包在一起

③图集
Unity3D性能优化 (五)——UI

Unity3D性能优化 (五)——UI

图集是将小图拼在一张大图上,在Unity工程中再切割成单个精灵使用。
精灵打包和图集优化DrawCall的原理是相同的:
在界面中默认一张图片一个DrawCalls,同一张图片多次显示仍然为一个DrawCalls,因此将多张小图合在一起从而减少DrawCall.

二、网格重建
关于Graphics的重构:http://www.cnblogs.com/twjcnblog/p/5850648.html
为了避免网格重建带来的开销,可以对UI布局进行动静分离,将动态变化中的UI组件单独分配到一个Canvas中。

三、UI事件检测
UGUI中的事件检测是判断输入事件的位置与按钮的绘制位置是否重合,这样导致了进行事件检测时会对所有UI元素进行判断,可是对不进行响应事件的UI元素屏蔽掉其事件。
Unity3D性能优化 (五)——UI
去除Raycast Target的√

四、OverDraw(过度绘制)
Unity3D性能优化 (五)——UI

Unity3D性能优化 (五)——UI
对于一些透明的边框背景图,其中间区域理论上是不必去绘制的,虽然设置成了透明,不被人们看见,但计算机还是进行了绘制,因此应该将这一部分性能消耗规避掉,传统的做法就是如上图去掉FillCenter的勾选。