DrawCall优化
知识点一 DrawCall是什么?
DC就是CPU通知GPU进行一次渲染的命令
如果DC次数较多会导致游戏卡顿
我们可以通过打图集,将小图合并成大图,将本应n次的DC变成1次DC来提高性能
知识点二 FairyGUI 和 UGUI以及NGUI的 DrawCall优化异同
相同点:
3种UI都是通过打图集来优化DC
不同点:
UGUI和NGUI的UI元素层级会影响DC的数量,我们拼UI时,要注意不同图集的UI元素的层级关系
FairyGUI中不用太过在意UI元素的层级,它会帮助我们进行深度调整
FairyGUI采用了Unity的动态批处理技术,提供了深度调整技术进行DC优化
动态批处理:cpu每帧把可以进行动态批处理的网格进行合并,再把合并后的数据传给gpu,使用同一个材质对其渲染,达到降低DC的目的
知识点三 FairyGUI中优化DrawCall的关键步骤
cs
TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("Teach");
1.打开Unity中的动态批处理 File------>Build Setting------>PlayerSetting------>Other Setting------>Dynamic Batching
2.将组件的fairyBatching属性设置为true
cs
panel.fairyBatching = true;
**注意:**某个组件设置了fairyBatching,那么无需在子组件和孙子组件再启用fairyBatching
一般只在顶层组件打开这个功能(面板组件)
永远不要在GRoot 上开启fairyBatching
知识点四 手动触发深度调整
对于打开了fairyBatching 的组件
当自己调用SetPosition 等API 改变子元件或者孙子元件的位置、大小,旋转或缩放
并不会自动触发深度调整
例如:一个图片原来显示在一个窗口里的顶层,你将它从原来的位置移到另外一个位置,这个图片就有可能被窗口里的其他元素遮挡,这时开发者需要手动触发深度调整GObject 中的InvalidateBatchingState 方法
cspanel.InvalidateBatchingState();
注意:这个API并不需要由开启了fairyBatching 的组件调用
可以是任何一个内含的元件