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
太累了有空在补。。。。。。