栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity性能优化之UI

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity性能优化之UI

目录
  • 1.合理的划分Canvas
  • 2.Raycaster的使用
  • 3.避免使用Camera.main
  • 4.尽可能避免采用布局组
  • 5.正确的隐藏Canvas
  • 6.Atlas的使用

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(图集)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/905864.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号