Unity优化
发表于2016-05-13
内存优化
大概标准
纹理 40M
Mono 30M
Animation 20M
Mesh 10M
Font 10M
Audio 5M
GfxDriver 25M
ResourceManager 视情况而定(跟 你ResourceManager里放了多少文件)
(该标准是我做 MMO 和 FPS时的标准值 不同项目会有不同程度的降低)
内存安全线 android unity在170M左右 pss在260M (1G内存手机上不会因为内存不足crash)
ios的在280M左右(均指峰值)
工具
unity Profile
Mono提供的内存查看工具 heapshot 需要替换unity自带的dll 查看当前内存对象情况
网易 emmagee性能评测工具 开源 可做自定义 加入当前场景名字
IOS 工具不好用
根据unity提供的API 自定义性能Profile工具 带来的损耗较小。
注意点
内存基本存在3种问题 1 内存泄露 2 资源冗余 3 Mono无效内存
内存泄露 主要是资源管理 注意AssetBundle Asset对象的卸载与缓存。小心处理挂在DonotDestroy的节点下面的东西。小心static变量持有资源问题。所有场景均有一个空场景进入,空场景负责进行堆内存的清空。
保证每次进入空场景的内存是一样的。
资源冗余 保证资源不会被带入多个场景,可勤看Profiler即可。注意不要在内存中出现同一份的多份复制。例如 纹理开启了 read/write enable. 调用 material mesh属性而不是 shareMaterial shareMesh属性。动画进行分割。例如场景只需要idle动画,则可以做一个prefrab只有idle动画,无需加载其他动画。
Mono无效内存 保证mono峰值不要太高。主要是配置文件加载,序列化。
降低内存 纹理是最好的方式。 更改纹理格式,降低纹理尺寸。检查是否有冗余纹理。
CPU优化
标准
渲染 15ms 左右
脚本 10ms 左右
其他(主要是物理,动画) 8ms 左右
评判瓶颈
查看主要通过unity的profile工具。如果瓶颈在GPU上,profile上会有 waitforpresent 占比 或者通过 Adreno屏蔽掉openGl 来查看帧率是否有提升。
然后在看占比最高的一项是什么引起的。进行相对应的优化。
常用手段
开启多线程渲染。
减少GC。NGUI是贡献GC大户,可以通过profile进行逐一排查,优化。减少GetComponent AddComponent次数。对象多进行复用。能用struct就用struct(项目推广比较困难)
去掉无用log。
多进行缓存, 减少文件IO次数
update函数 最好只在基础层面出现。外围逻辑不要有update 函数,需要也用Invoke 或者自己实现的timer。
减少 skinmesh的数量 尽量用meshRenderer 同屏数过多 通过骨骼序列帧代替skinmesh实现
合并drawcall StaticBatch DymiticBatch
粒子尽量不用 用的话 场景效果大的粒子加入 离屏不渲染
对 粒子加入 lod
GPU优化
标准
DrawCall 控制在 200以下
同屏面数控制在4W面以下
评判瓶颈
Unity Profile 出现 waitforPresent
IOS的 FrameDebugger 可以看到CPU跟GPU分别耗时 同时也能看到某步的具体耗时
Adreno 也可给出每次pass消耗的clock数以及传输数量数。
常用手段
纹理采用GPU支持格式 尽量减少纹理大小
camera的远裁剪面设置近一些
看情况开启遮挡剔除
减少透明片 overdraw在低端机会有很严重的性能问题
减少shader复杂度。利用好 mask通道
降低分辨率
善用欺骗 很多效果可以通过巧妙的办法进行仿制。需要多跟美术沟通 https://simonschreibt.de/gat/fallout-3-edges/
GPU基本三大瓶颈 1.带宽 2.Vertex 3. Pixel 找出瓶颈分别优化
常用工具
unity profile 包括5的frameDebugger
ios frameDebugger
adreno
(PS unity5 android 以后会默认有一次blit,很耗。曾经的想法是通过unity提供的RenderPlugIn 重新绑定原定的fbo 然后在新的fbo替换掉他的shader 移除摄像机,通过剔除给剔除掉解决。但是重新绑定fbo后,unity会检测到更改,在改回来。所以只能hook住opengl,让绑定函数失效。但是没成功.有相同的问题的各位可以一起聊聊。与4.6相比,大概有5~10帧的消耗)
包大小优化
未完待续。。。
文/赵忠健(简书作者)
原文链接:http://www.jianshu.com/p/fd24db27818d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。