看了不少UI优化方面的东西,还是记下来方便记忆,优化性能往往是在各种选择之间做出平衡(空间换时间,或者GPU换CPU,舍弃精度等)。

主要优化点在减少Drawcall,减少Overdraw。

Mask

使用Mask会额外消耗多一个Drawcall来创建Mask,做像素剔除。

Mask不利于层级合并。原本同一图集里的ui可以合并层级,仅需一个Drawcall渲染,如果加入Mask,就会将一个ui整体分割成了Mask下的子ui与其他ui,两者只能各自进行层级合并,至少要两个Drawcall。Mask用得多了,一个ui整体会被分割得四分五裂,就会严重影响层次合并的效率了。

当只需要使用矩形Mak时,用RectMask2D

当需要用圆形Mask的替代办法:https://www.cnblogs.com/leoin2012/p/6425089.html

需要使用多边形Mask时,用:https://www.cnblogs.com/leoin2012/p/6822859.html

字体

尽量减少字体特效,outline,渐变等,可以使用带有描边的字体文件,尽量统一字体风格,减少不必要的额外字体文件,不用richtext。

降低Overdraw

设计上减少UI元素重叠,禁用不可见的UI,不要使用空的Image。

动静Canvas分离

在UGUI中,网格的更新或重建(为了尽可能合并UI部分的DrawCall)是以Canvas为单位的,且只在其中的UI元素发生变动(位置、颜色等)时才会进行。因此,将动态UI元素与静态UI元素分离后,可以将动态UI元素的变化所引起的网格更新或重建所涉及到的范围变小,从而降低一定的开销。而静态UI元素所在的Canvas则不会出现网格更新和重建的开销。

合并材质

。。。

界面切换

可以尝试通过添加一个 Layer 如 OutUI, 且在 Camera 的 Culling Mask 中将其取消勾选(即不渲染该 Layer)。从而在 UI 界面切换时,直接通过修改 Canvas 的 Layer 来实现“隐藏”。但需要注意事件的屏蔽,禁用动态的 UI 元素等等。
这种做法的优点在于切换时基本没有开销,也不会产生多余的 Draw Call,但缺点在于“隐藏时”依然还会有一定的持续开销(通常不太大),而其对应的 Mesh 也会始终存在于内存中(通常也不太大)。

最新文章

  1. ABP(现代ASP.NET样板开发框架)系列之22、ABP展现层——导航栏设置
  2. Linux下安装Oracle11g服务器
  3. iOS UIView简单缩放动画
  4. Day21 Django之Form文件上传、原生Ajax和实现抽屉实例
  5. Light OJ 1018 - Brush (IV)
  6. c语言:将二进制数按位输出
  7. 向python3进发
  8. 接触HTML和CSS心得体会
  9. ADO.NET 中可以发送包含多个SQL语句的批处理脚本到SQL Server,但是用MySQL的ODBC驱动不行
  10. ggplot2 multiply graphs on one figure
  11. 如何利用Android Studio打包React Native APK
  12. dubbo系列七、dubbo @Activate 注解使用和实现解析
  13. 03-Maven坐标管理
  14. Navicat导出opencart2.3数据字典
  15. org.springframework spring-test
  16. BZOJ1558 等差数列
  17. ListVIew点击事件失效
  18. uva 12325 Zombie's Treasure Chest
  19. 有关git的使用,和git的一些提交冲突。
  20. BFS练习-POJ.2386

热门文章

  1. MySQL操作之DML
  2. Mac的Terminal中无法使用mvim解决方案
  3. LeetCode 297.序列化二叉树 - JavaScript
  4. wumii 爆款总结经验
  5. 生成MyEclipse6.5&7.5&8.5 注册机源码
  6. 【Unity】鼠标指向某物体,在其上显示物体的名字等等等等信息
  7. HTML设置目标页面在新窗口打开
  8. 2-10 就业课(2.0)-oozie:6、通过oozie执行mr任务,以及执行sqoop任务的解决思路
  9. 安卓10GB内存旗舰手机的普及,能成为拯救DRAM厂商的救命稻草吗?
  10. Day6-T4