Unity UI性能优化小技巧

一、Drawcall优化

Text会打断合批,调整Prefab的结构时,尽量将Text放在一起。有个比较麻烦的是Button,一般来讲Button下面都会挂一个Text,直接把这种Text分离的问题在于,当我们想要将Button隐藏或显示时,对应的Text不会跟随着显隐,可以用下面的脚本来将Button和Text“绑定”:

[ExecuteInEditMode]
public class BindingWithText : MonoBehaviour
{
    public Text[] _texts;
    
    private void OnEnable()
    {
        UpdateTextActive(true);
    }

    private void OnDisable()
    {
        UpdateTextActive(false);
    }

    private void UpdateTextActive(bool active)
    {
        if(_texts == null)
            return;
        for (var i = 0; i < _texts.Length; i++)
        {
            _texts[i].gameObject.SetActive(active);
        }
    }
}

如果按钮按下或抬起时有缩放动画,可以在脚本里添加Update(),更新Text的Scale。

二、Overdraw优化

1.九宫格图片很常用,对于某些Image,如果可以勾掉FillCenter就勾掉,比如弹窗的背板,背板如果会被弹窗内容盖住,就可以勾掉FillCenter,降低Overdraw。
2.Text的Outline和Shadow组件会生成大量的顶点和三角片,会使Overdraw比较严重,需要多注意。

三、不再需要注意的动静分离

Unity 5.2之前,需要动静分离的原因是,某个UI元素出现变动(位置、颜色等)时,同一个Canvas下的所有元素都需要ReBatch(重建网格),会带来比较大的计算量导致帧率下降,因此要将动和静的元素放在不同的Canvas下。在5.2版本后,这一部分计算已经挪到了非主线程,一般情况下不会再导致帧率下降,且更多的Canvas会增加Drawcall,因此新版本不建议无脑地动静分离,要视情况而定。

四、其他

Text的BestFit和RichText能不用就不用。
Text和Image的RaycastTarget默认是勾选的,不需要就勾掉。

你可能感兴趣的:(Unity UI性能优化小技巧)