当前位置: 首页 > news >正文

Unity - UGUI动静分离

原理:UGUI 是基于Canvas来进行合并计算的

1.不同Cavans的UI元素,是无法合批渲染,无法实现同一个drawcall

2. 每次合批的时候,会合并计算Canvas下所有的UI元素 , 具体流程:

Step1: 对Cavans下所有的UI元素进行合批计算

Step2: 每帧将合并后的结果提交给GPU渲染

Step3: 当某个UI元素改变以后,先计算某个UI元素改变后的数据,再结合其它UI元素,重新合批 (即:某个UI变动,导致mesh重建,全部重新合批计算)

3. 每次UI元素的位置等相关信息改变,都会引发重新合批计算

4. 静止不动的UI的合批计算开销最小,如果Cavans下所有的UI元素一旦创建都不再改变,则只会产生一个合批计算,性能最好

5.当Cavans下有不断变化的物体时,每次都会重新进行合批计算,此时不动的物体少,那么最后合批的时候物体的数据就少

由上面的分析,就得到一个结论: 动静分离,将不变的物体放一个canvas下, 变化的物体放一个canvas下,优化合并时候的开销

因此很多人就推导出一个结论: 每个界面一个Cavans,减少Mesh合并的开销

但是事实并非如此

基于多Canvas的”动静分离”会打乱合批,能节省的是合并时不变的元素的数据copy

Unity UGUI 会基于Canvas将能合并的UI元素,计算合并到一起,然后再提交给GPU渲染来节约Drawcall

在这个过程中,如果某个UI元素改变了,就会引发一次合并计算。

”动静分离”一般指的是把那些不经常动的UI与经常动的2D元素分成不同的Cavans,来减少合并时候的开销。这个通常叫做”动静分离”。

我们在开发项目的时候,会把经常变化的游戏元素(2D游戏角色,玩家昵称,玩家血条等)做到一个Cavans下,把通常的游戏操作UI界面做一个Cavans下,对于那些UI内容非常多的如”任务滚动列表”等,我们也会考虑单独做一个Cavans,然后持续监测UI性能即可

一般项目中2~3个Cavans就可以了,还是要把重点放在UI的drawcall优化上

http://www.lryc.cn/news/470004.html

相关文章:

  • arm 体系架构-过程调用约定
  • STM32基于LL库的USART+DMA使用
  • 设计模式06-结构型模式1(适配器/桥接/组合模式/Java)
  • 【损害和风险评估&坑洼】路面坑洼检测系统源码&数据集全套:改进yolo11-DCNV3
  • GenAI 生态系统现状:不止大语言模型和向量数据库
  • gitlab 配置ssh keys
  • 小程序开发实战:PDF转换为图片工具开发
  • 我有两台120kw充电桩一天能赚多少钱
  • 深入了解 Android 中的命名空间:`xmlns:tools` 和其他常见命名空间
  • stable-zero123模型构建指南
  • 算法题解记录32+++最长连续序列(百题筑基)
  • 全球知名度最高的华人起名大师颜廷利:世界顶级思想哲学教育家
  • Flink Rest API
  • Zig 语言通用代码生成器:逻辑,冒烟测试版发布二
  • mysql 通过GROUP BY 聚合并且拼接去重另个字段
  • Java应用程序的测试覆盖率之设计与实现(一)-- 总体设计
  • Unity C#脚本的热更新
  • 监督学习之逻辑回归
  • 深度优先算法(DFS)洛谷P1683-入门
  • Python数据分析基础
  • 《企业自设2-软件测试》线下课day3: 006扩展虚拟机
  • 配置和排查 Lombok 在 IDEA 中使用的详细步骤
  • JavaWeb合集18-接口管理Swager
  • 背包九讲——二维费用背包问题
  • 【mysql进阶】4-7. 通用表空间
  • 2024 年互联网大厂 1300 多道 JAVA 面试题汇总,包含了程序员的所有技术点
  • 【开源免费】基于SpringBoot+Vue.JS在线文档管理系统(JAVA毕业设计)
  • Linux资源与网络请求
  • RPA技术重塑企业自动化的未来
  • 使用RabbitMQ实现延迟消息的完整指南