一、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默认是勾选的,不需要就勾掉。
网友评论