UGUI优化总结

Posted lan-yt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UGUI优化总结相关的知识,希望对你有一定的参考价值。

1.检查空Image

游戏中许多时候会使用一个透明的Image组件来监听点击事件或者屏蔽Image后面的按钮事件,空的Image可以解决这个问题,用起来也很方便,但是空的Image照旧会参与绘制,从而产生overdraw。解决办法是扩展Graphic组件来替换Image组件。

游戏中使用工具检查空Image: 对应prefab上Image组件的Sprite为空或Color.a透明(<0.05f),我们将使用了空Image的prefab列出来手动进行替换。监听事件时还会使用一个Button或者EventTrigger来实现,这种需着重减产。工具见末尾链接地址。

2.优化九宫格Image

九宫格图像使用的也比较多,Image选为Sliced类型后会有一个fillCenter选项,默认情况下该选项是勾选的,但如果九宫格的中间区域为透明图像,其实不需要勾选fillCenter,从而降低overdraw。所以我们需要使用工具检测该Image的sprite的中心区域

是否为透明,将透明的prefab列出来供检查。

3.检查Mask组件

Mask组件也会被用到,最多是用在ScrollView中,网上也有很多资料介绍Mask组件会产生额外的两个drawcall,而大部分时候Mask都是矩形的,所以其实可以使用RectMask2D组件来替换掉Mask组件,官方也比较推荐RectMask2D组件,

但如果你的Mask组件不是矩形的那么就不能替换。

4.检查错误透明材质

项目中有很多材质美术设置有些问题,从而影响性能,其中一个就是Material所使用的纹理是RGB格式或者虽然RGBA格式但是A通道为1,但是美术却给使用了一个透明的Shader进行渲染,这种设置虽不会出错但是会影响性能。所以我们需要检测出

renderType为Transparent或者TransparentCutout类型,并且他的renderQueue>2000(2000为Geometry)且<=3000(3000为Transparent)的材质,如果他的主纹理不透明,则列举出使用了这种材质的prefab或者Scene,以便检查。

5.错误的UI设置

之前在检查一个UI合批失效的问题,明明打了图集,但就是不能合批,很是诧异,经过测试发现如果你的Image组件pos.z不为零或者rota.x或rota.y不为零,那么会被当作3DUI从而不参与合批,增加drawcall,而这些非零值有时往往是不需要甚至是不注意

被设置上的,但却影响了这个合批,很是坑人。所以需要用工具检查这种被设置错误的UI,酌情进行重置。

 

工具地址:https://gitee.com/planefight/Tools.git

 

以上是关于UGUI优化总结的主要内容,如果未能解决你的问题,请参考以下文章

UGUI性能优化

如何快速优化手游性能问题?从UGUI优化说起

关于Unity中的UGUI优化,你可能遇到这些问题

UGUI 优化

UGUI 优化

UGUI batch 规则和性能优化