FairyGUI学习

 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的关键步骤


     

  TeachPanel panel = UIManager.Instance.ShowPanel("Teach");


        1.打开Unity中的动态批处理 File——>Build Setting——>PlayerSetting——>Other Setting——>Dynamic Batching
        2.将组件的fairyBatching属性设置为true
   

    panel.fairyBatching = true;


        注意:某个组件设置了fairyBatching,那么无需在子组件和孙子组件再启用fairyBatching
              一般只在顶层组件打开这个功能(面板组件)
             永远不要在GRoot上开启fairyBatching
 

知识点四 手动触发深度调整


        对于打开了fairyBatching的组件
        当自己调用SetPositionAPI改变子元件或者孙子元件的位置、大小,旋转或缩放
        并不会自动触发深度调整
        例如:一个图片原来显示在一个窗口里的顶层,你将它从原来的位置移到另外一个位置,这个图片就有可能被窗口里的其他元素遮挡,这时开发者需要手动触发深度调整 GObject中的InvalidateBatchingState方法
       

 panel.InvalidateBatchingState();

        注意:这个API并不需要由开启了fairyBatching的组件调用
        可以是任何一个内含的元件
   

你可能感兴趣的:(学习,unity,游戏,ui)