Unity UGUI优化整理
看了不少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 也会始终存在于内存中(通常也不太大)。
最新文章
- ABP(现代ASP.NET样板开发框架)系列之22、ABP展现层——导航栏设置
- Linux下安装Oracle11g服务器
- iOS UIView简单缩放动画
- Day21 Django之Form文件上传、原生Ajax和实现抽屉实例
- Light OJ 1018 - Brush (IV)
- c语言:将二进制数按位输出
- 向python3进发
- 接触HTML和CSS心得体会
- ADO.NET 中可以发送包含多个SQL语句的批处理脚本到SQL Server,但是用MySQL的ODBC驱动不行
- ggplot2 multiply graphs on one figure
- 如何利用Android Studio打包React Native APK
- dubbo系列七、dubbo @Activate 注解使用和实现解析
- 03-Maven坐标管理
- Navicat导出opencart2.3数据字典
- org.springframework spring-test
- BZOJ1558 等差数列
- ListVIew点击事件失效
- uva 12325 Zombie's Treasure Chest
- 有关git的使用,和git的一些提交冲突。
- BFS练习-POJ.2386
热门文章
- MySQL操作之DML
- Mac的Terminal中无法使用mvim解决方案
- LeetCode 297.序列化二叉树 - JavaScript
- wumii 爆款总结经验
- 生成MyEclipse6.5&;7.5&;8.5 注册机源码
- 【Unity】鼠标指向某物体,在其上显示物体的名字等等等等信息
- HTML设置目标页面在新窗口打开
- 2-10 就业课(2.0)-oozie:6、通过oozie执行mr任务,以及执行sqoop任务的解决思路
- 安卓10GB内存旗舰手机的普及,能成为拯救DRAM厂商的救命稻草吗?
- Day6-T4