Unity性能优化之UI

1.合理的划分Canvas

Canvas是UGUI的基本组件,它生成表示放置在其上的 UI 元素的网格,也就是说它会把一个Canvas下的所有元素合并在一个Mesh里。如果Canvas下的元素很多,任意一个元素发生位置、大小的改变,就需要重新合并所有元素的Mesh。如果元素非常多的话,可能就会造成卡顿。因此我们可以合理的划分Canvas,将需要频繁更改的动态UI元素静态UI元素划分成多个Canvas从而减少重绘,但需要注意的是不要太过细分Canvas,否则会导致DrawCall上升。

2.Raycaster的使用

Graphic Raycaster 是将输入转换为 UI 事件的组件。它将屏幕/触摸输入转换为事件,然后将它们发送到感兴趣的 UI 元素。需要在每个需要输入的画布(包括子画布)上安装一个 Graphic Raycaster。它会获取画布上接受输入的UI元素执行交集检查,所以对于静态和非交互元素应关闭Raycast Target从而减少交集检查的次数。

3.避免使用Camera.main

当Canvas模式为World Space Canvas时,不要让Event Camera字段为空,否则它会频繁通过Camera.main为该字段赋值,所以采用世界空间画布时应制定事件摄像机,如需更改可用代码进行修改。

4.尽可能避免采用布局组

当采用布局组后,每个试图修改其布局的UI元素都会执行至少一个GetComponents调用。此调用在布局元素的父级上查找有效的布局组。如果它找到了,它会继续沿着 Transform 层次结构向上移动,直到它停止找到 Layout Groups 或到达层次结构根 - 以先到者为准。。因此,每个 Layout Group 都会在每个子 Layout Element 的脏进程中添加一个 GetComponents 调用,使得嵌套的 Layout Group 对性能非常不利。所以我们应该尽可能避免使用布局组,使用锚点进行比例布局或编写自己的代码来计算布局。

5.正确的隐藏Canvas

当需要隐藏UI元素和画布时,我们应该禁用Canvas组件本身。禁用 Canvas 组件将阻止 Canvas 向 GPU 发出绘图调用,因此 Canvas 将不再可见。但是,Canvas 不会丢弃它的顶点缓冲区;它将保留其所有网格和顶点,当您重新启用它时,它不会触发重建,它只会重新开始绘制它们。禁用 Canvas 组件不会触发 Canvas 层次结构上昂贵的 OnDisable/OnEnable 回调。请小心禁用运行昂贵的每帧代码的子组件。

6.Atlas的使用

如果贴图是分开的,那么每个贴图依然会多占用一个DrawCall。为了减少DrawCall,我们可以把多张图片合并在一个图片中,这称为Atlas(图集)。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值