关于ugui界面显示隐藏的优化
在我们项目开始用ugui做UI开始就一直有在显示或者隐藏(用的是gameobject的setactive接口)UI的时候会产生gc以及一些计算,这个主要是unity的maskablegraphic在onenable的时候做了graphic的rebuild以及layout的rebuild,在ondisable的时候也做了一些计算。
刚开始有用把整个UI界面移出屏幕的方法来避免显示隐藏的消耗,但是dc还会在哦。还用了一种把UI的scale设为0,0,0。dc是消掉了,但是如果UI里面有粒子系统,某些粒子系统是不受scale影响的。还可能会影响UI里面的tween动画。显然这两种方式并不是很好用。
今天改了ugui的底层,把maskablegraphic类里面的updatemodifiedmaterial虚函数重写掉,它的子类并没有重写这个函数,所以我们直接派生相关的UI组件,并重写它,里面主要有一行代码会去获取mask组件,这个是很耗的。通过缓存mask组件,可以避免这个消耗,同时预留一个setmask接口,避免后面有添加mask组件时,要调用这个接口。这样了弄了之后,显示隐藏UI的gc下降了2/3。但是仍然还有一些消耗。
通过在UI的根节点添加cavas组件,用这个组件的enable代替gameobject的setactive接口,显示以及隐藏UI变成0消耗。至此,这个问题完美解决!
当使用canvas显示隐藏UI的时候,底下的非UI元素(特效,如meshrender,particlesystem)不受控制。通过在特效根节点加一个组件,继承UIbehaviour,重写oncanvashirerchychanged接口,当UI根节点的canvas状态发生改变时会回调这个函数。我们在这个函数控制特效子对象。对于meshrenderer,我们对组件的enabled进行设置,particlesystem,我们用play以及stop进行控制,还有clear接口。
当查看显示隐藏UI的gc消耗的时候发现有4个lua回调c#的接口gc非常高,通过导出c#类到lua解决。
当canvas下面还有canvas并且勾选了overridesorting,底下canvas就不受顶部canvas控制。这个时候就不适合用canvas模式来控制显示隐藏。
原先对mask的缓存是在awake获取,但是当UI对象很多并且大部分没有mask组件的时候,会造成不必要的性能损耗。因此最后我们把mask变成public字段,并在editor显示它,然后写个工具把所有mask获取到并缓存起来。同时要注意当后面动态加了mask组件,要自己设置引用,这个可以通过封装add mask组件接口来实现。
关于ugui界面显示隐藏的优化相关推荐
- 【unity shader】基于UGUI字体的outline优化
基于Shader实现的UGUI描边解决方案 找了一下outline的一些优化的实现方案,但是那个方案的两层text叠加或者是image叠在上面会出现颜色偏差问题. 目前已找到对应的问题并进行了一些修复 ...
- div 隐藏_SEO优化,隐藏文本与隐藏链接对SEO的影响!
对于SEO行业而言,隐藏文本(HiddentText)是一个古老而又久远的话题,它早期主要用于提高页面对特定关键词的相关性,由于这部分内容对用户不可见,常常被算法识别为作弊行为. 但即便如此,仍有众多 ...
- Unity基础知识学习五,UGUI优化相关
1.什么是UGUI优化,UGUI优化的理论基础 1.1理论基础 Canvas, 是Unity渲染系统给层状几何体( layered geometry )提供的可以被画入.被放在上面或者放在世界空间的 ...
- Unity 性能优化基础
文章目录 前言 一.代码层面 二.减少Rebatch和Rebuild 1.Rebatch 2.Rebuild 3.优化点 三.降低OverDraw 总结 前言 最近笔者在找工作,面试过程经常被问到工作 ...
- 上传和优化Magento 2中的产品图像和视频
2019独角兽企业重金招聘Python工程师标准>>> 首先,了解如何上传以及优化Magento 2中产品的图像和视频是至关重要的.大多数Magento 2网站都有各种各样的产品以及 ...
- 需要某个字体包才能正确显示此页面_[三分钟小文]前端性能优化-页面加载速度优化...
本期内容请记住一个核心:JavaScript很快,DOM很慢 阅读本文您将收获: 从用户输入URL到看得到页面的过程 页面渲染过程 在页面加载层级的性能优化 用户看到页面之前都经历了什么 这一部分是面 ...
- 原来华为手机还有3大隐藏省电功能,开启后,两天一充很简单
如今的手机性能都很不错,在日常使用方面也很流畅,但就是电池技术进展缓慢,虽然现在的手机电池都是标配4000毫安,但还是觉得电量很不耐用. 其实华为手机的省电技巧有很多,今天笔者就分享3个华为手机隐藏省 ...
- SEO优化之og:标签
文章目录[隐藏] SEO 优化 og 标签前言 SEO 优化 og 标签历史 SEO 优化 og 标签常用标签 SEO 优化 og 标签例子 1 SEO 优化 og 标签例子 2 SEO 优化 og ...
- C++ 性能优化篇一《优化概述》
1.1 优化是软件开发的一部分 优化是一项编码活动.在传统的软件开发过程中,直到编码完成,项目进入了集成与测试 阶段,能够观察到程序整体的性能时,才会进行优化.而在敏捷开发方式中,当一个带有 性能指标 ...
- Unity制作头顶血条方式对比与优化
制作方式主要有四种:OnGUI.NGUI.UGUI.Shader 区别 UGUI的Canvas 有世界坐标和屏幕坐标 UGUI的Image可以使用material UGUI通过Mask来裁剪,而NGU ...
最新文章
- UE4_Lighting Scenarios
- CSP认证201512-3	画图[C++题解]:dfs、左下角建系、坐标反着读入
- Scala入门到精通——第十五节 Case Class与模式匹配(二)
- Hibernate+mysql 中文问题解决方案.
- Cannot read property ‘forceUpdate‘ of undefined
- 软件测试 学习之路 Linux基础命令 (一)
- python彩票结果分析_天啦噜!Python多线程居然是骗人的?
- python容器装水_Python版LeetCode11. 盛最多水的容器
- WinFom解决最小化最大化后重绘窗口造成闪烁的问题
- [20180801]insert导致死锁.txt
- python配置文件读取环境变量_转载:Python项目读取配置的几种方式
- TensorFlow学习笔记之 PReLU激活函数原理和代码
- java 获取各省市的区号_城市查区号示例代码
- java是什么类型语言_java属于什么类型语言
- 匹配的通配符很全面,但无法找到元素mvc:annotation-driven的声明
- 【模电】习题知识点总结(持续更新ing)
- C语言文件操作与系统文件操作接口
- css3上升悬浮粒子特效,HTML5 CSS3星空背景悬浮粒子动画特效
- python day9
- android:layout_margin真实含义 及 自定义复合控件 layout()执行无效的问题解决
热门文章
- Rust: map中的问题,两种写法有什么不同?
- (转)Rust: Rust的 Deref 运算符
- (转)证券投资及财富管理市场创新趋势
- (转)马云又在押宝智能投顾!
- Julia: save 和load的用法 和与Matlab的效率比较
- 【三维路径规划】基于matlab麻雀算法求解无人机三维航迹优化问题【含Matlab源码 301期】
- 【预测模型】基于matlab BP神经网络预测【含Matlab源码 221期】
- ai的利与弊 辩论_为什么AI辩论失败了
- java 设计模式的相似_聊聊Java中几种常用的设计模式
- mysql linux内核_mysql 5.7.15 vs mysql 5.6.31性能测试以及不同linux内核性能比较