网址建站,北京专业网站制作公司,彩票网站建设维护,做汽车精品的网站原理#xff1a;UGUI 是基于Canvas来进行合并计算的
1.不同Cavans的UI元素#xff0c;是无法合批渲染#xff0c;无法实现同一个drawcall
2. 每次合批的时候#xff0c;会合并计算Canvas下所有的UI元素 , 具体流程:
Step1: 对Cavans下所有的UI元素进行合批计算
Step2: …原理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优化上