手游客户端的性能篇(三)----Unity和C#版(具体优化--UGUI,资源规范等)

接上篇:

4、Enum:枚举当Key使用或枚举转换为String,都会有GC

5、闭包:函数和与其相关的引用环境组合成的实体。闭包IL代码会出个新类,频繁调用一个函数时,尽量不用。

6、其他

      1>update中没必要每帧的。

       2>不要常使用find,在start中缓存。

       3>使用内建数值,比如Vector3.zero而不是new Vector3(0, 0, 0);

       4>主线程同步加载资源会瞬卡,异步加载;

       5>逻辑裁剪;

        6>对象回收复用,对象池;

        7>LOD:根据不同目标平台制订资源规则:主角用高,其他玩家中低;特效自动处理成H,M,L三版本;

        8>meshcollider换为boxcollider

      .......

        (上面会持续更新一些优化中的细节)

优化流程:  测量---分析---优化---验收

优化工具:Unity  Profiler, Adreno Profiler,WeTest,UWA

性能指标:

               瞬卡与平局帧数(fps)

               渲染批次数(drawcall)

               内存使用量(memory)

               崩溃率(crash)

               包体大小(install file size)

内存优化:

    1>UI图集最大1024*1024,尽量提高图集利用率;

GPU优化:(优化Shader,减少OverDraw)

      1>Fog {  Mode Off } 关闭雾效;

      2>fragment剔除Alpha为0的像素,减少OverDraw;     

      3>Lod

CPU优化:(GC)   

      1>DrawCall,合批:

                 同一界面的UI资源放在一个图集中,方便合批;重复利用的公用的放在common;

                 相邻节点尽量使用同一图集的图片;

                 线框模式下,Rectransform重叠会增加DC;

                 Canvas.SendWillRenderCanvases():UI被Enable、顶点色变化、Text 组件的文本变化等时所产生的调用,CPU 飙高大部分情况下主要是因为UnityEngine.UI.Graphic.UpdateGeometry()重新生成了所有的顶点数据;

                  UGUI动态合批:Canvas合并UI元素的网格,并且生成发送给Unity渲染管线的命令。减少一些频繁变动的UI 元素
的Canvas 下的顶点数量;打开界面时看不见的prefab尽量拆分,动态加载;切换active也会带来消耗;Layout也有消耗;Raycast Target 默认不勾选;

                   静态批次只需要在Inspector勾选static选项即可,场景中的多个物件如果是不动的(包括位置、缩放、旋转等),并且共享同一材质那么可以选择采用静态批次。

      2>GC前面的1,2,3,4,5,6讲了很多。

(持续更新)

      

猜你喜欢

转载自blog.csdn.net/jfy307596479/article/details/84034625