UGUI优化方案之 SetActive 和 CanvasGroup
UGUI的开关方案一种是使用SetActive进行的
但是这种方案其实有一个弊端,我们来测试下
每帧进行1000次的SetActive 的true和false
这是我们的UI,上面挂了一些 按钮 图片 输入 等元素
帧率只有2.4,我们看下Profiler
可以看到 GameObject.Activate 和 GameObject.Deactivate 消耗很高,这就是因为大量调用了SetActive
点开查看
可发现其主要原因是SetActive会触发子物体的OnEnable和OnDisable方法,而且这2个方法是有GC的
使得整体带来了GC的消耗
SetActive---------------->OnEnable OnDisable--------------->GC开销
接下来,我们看下CanvasGroup的表现
帧率可维持在60多,GC瞬间没有了,对比强烈
稳定!
SetActive是因为出发unity的MonoBehaviour的生命周期,所以造成GC的消耗
不过注意如果使用了 CanvasGroup 的Alpha来控制界面的显隐,挂载的Monobehaviour脚本是一直执行的,如果你有Update方法的话,这个地方需要自行控制下,SetActive则不需要担心这点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~