unity优化之美

unity优化方面主要有以下方面

1、CPU

2、GPU

3、Memory

4、other

 

1、CPU(小心unityAPI里面带s的方法,比如Getcomponents等等会返回一个数组的API,大部分会带来GC Alloc)

一、c#不良编码带来的GC Alloc。

       Update、LaterUpdate函数的逻辑复杂。

       序列化和反序列化的操作(Json、XMl等等)。

       String:ToString()、字符串的拼接。

       Get API:GetComponents、Object.name、Sprites.vertices\...

       Debug.Log、Warning。

       闭包、匿名函数。

二、unityAPI的使用带来的GC Alloc

       ParticlesSystem的Start、Stop、Pause、Clear、Simulate。注意当在一个ParticlesSystem上面挂了很多Particles的时候,  withChildren默认为true;所以应该注意让withChildren=false;2017.2修复了Stop和Simulate内部函数的闭包。

      GetComponents、Input.Touches、Mesh.vertices...。 返回值是一个Copy; 缓存返回值;  Workaround;

       Camera.main的背后实现为 ObjectFindObjectWithTag("MainCamera");

       Physics.RaycastAll;  推荐使用: RaycastNonAlloc

 三、UGUI

      Canvas Rebuild Mesh考虑Batches、材质重建、排序、Mask(推荐使用RectMask2D;

      注意GraphicRaycast;

      Layout;

     多Canvas(做到动静分离);

     嵌套Canvas;

     Canvas数量:在2017.3发现Canvas过多带来的性能开销;控制Canvas数量和分离规则;以真机测试为准;

     OverDraw的消耗:UI元素的叠加层级;

     GraphicRaycaster:Raycast Target的开闭;静态Canvas不要挂接;

     Canvas WorldSpace & Screen Space:Even Camera or Render Camera=null(会带来性能开销);

     Layout:  SetDrity遍历带来高消耗;RechTransform.Anchor 代替LayoutGroup;缓存UI对象;自行编码布局(自带布局组件是  每一帧都在做的,所以如果对性能要求比较高,就不要采用水平和垂直自动布局这些组件);

     图集的分类方式:按功能模组区分;按UI区分;减少一个UI Prefabs应用的图集数量;合并图集的取舍:图示;NPOT背景图

  四、引擎特性

         Static Batching:内存换CPU;StaticBatchingUtility.Combine(产生很大CPU消耗);Mesh Backer(插件);美术手工合并材质;

         Dynamic Batching:900个顶点;Lightmap data;多Pass;合并消耗和批次消耗的平衡;

         2017.3支持了32 bit Mesh index buffers:超过65k顶点;手动开放;

        Batches不是唯一的因素:关注SetPass数量;

        骨骼和蒙皮:GPU Skining(有消耗);BlendShapes(推荐使用);关掉Animator(对于玩家比较近的其他玩家正常播放动画,而对于比较远距离的其他玩家就降帧)(网易倩女幽魂游戏里面采用的优化策略);

        Instancing:  GPU Instancong;  Animation Instancing;  (比较适合篮球和足球游戏里面的观众等等);

        物理:MeshCollider开销大; 避免Mesh R/W Enabled;PhysicsManager Setting:Fixed TimeStep; LayerCollisionMatrix删除无用选项;

      

2、GPU

一、 Rendering

             顶点数量: 单个Mesh(人物、建筑物。。。);  场景 ;  适当的减面;删除被遮挡的部分; LODGroup;Mesh ;Baker  LOD;   Terrain面积和密度;美术制作: 减少零散部件; 合并材质和贴图;

 二、 纹理

               尺寸:  带宽;

              Mipmap  :提高采样的品质,降低命中耗时,IO速度;

              Filter Moder: Biliner:UI纹理常用; Trilinear:配合Mipmap进行插值;

           AlphaTest: AlphaBlend替代;

           Mesh.alpha=0依然被渲染;

    三、 shader...................

    四、Terrain(性能不好)

             分割多个地块:  插件:Terrain Slicing & Dynamic Loading Kit;  接缝;

        调整地形数据尺寸、精度: Resolution ; Base Map Distance;

  五、 其他

         控制粒子发射器的数量

         控制粒子发射数量Max Particles

         特效不一定都要通过ParticlesSystem实现

         Camera数量

         Optimize Mesh

                优化vertices index数据

3、Memory

  一、 Mesh

           Read/Writer Enable

                 MeshCollider(如果一定要用,可以用一个简模)

                  Mesh.updateMeshData

            多套UV、Colors

            面数

                   Simplygon工具

  二、 Texture

           压缩格式:PVRTC、ASTC;2018.1支持IOS Opengles3.0上使用ETC2;

           Read/Writer Enable:刷地形是需要打开,打包时关闭;

           合理的尺寸;

           贴图面积的利用率:大量空白;全透明区域;

           建议60mb;

            不支持ETC2、ASTC时回退ARGB的开销(CPU、Memory)

三、AnimationClip

        Ainm.Compression;

        压缩浮点数的精度;

         scale曲线的剔除;

         加载和卸载策略:一次性全部加载;分级别;

         建议40MB;

4、other

太累了有空在补。。。。。。

 

unity优化之美_第1张图片

unity优化之美_第2张图片

          unity优化之美_第3张图片

 

  unity优化之美_第4张图片

       unity优化之美_第5张图片

    unity优化之美_第6张图片

     unity优化之美_第7张图片

unity优化之美_第8张图片

unity优化之美_第9张图片

unity优化之美_第10张图片

unity优化之美_第11张图片

unity优化之美_第12张图片

 

unity优化之美_第13张图片

unity优化之美_第14张图片

unity优化之美_第15张图片

unity优化之美_第16张图片

 

 

 

    

       

你可能感兴趣的:(unity)