Unity性能优化汇总

内容会持续更新,有错误的地方欢迎指正,谢谢!

性能优化嘛,大家都说像海绵中的水,挤一挤总会有的,但我却想说它像内衣里的肉,挤一挤真的可以有。哈哈哈,有点污,见笑了,进入正题。

CPU方面的优化

CPU优化不够会出现的问题:

  1. 由于短时间内的计算量太大,导致画面流畅性降低,俗称跳帧
  2. 发热严重,耗电量高

CPU优化方向:

  1. DrawCalls
  2. 物理组件
  3. GC(GC为处理内存,此项为CPU使用GC处理内存时产生的性能损耗)
  4. 代码
Drawcalls

Drawcall是啥?其实就是对底层图形程序(比如:OpenGL ES)接口的调用,以在屏幕上画出东西。

如何优化:

1)使用Draw Call Batching,也就是描绘调用批处理。Unity在运行时可以将一些物体进行合并,从而用一个描绘调用来渲染他们。

  1. 静态批处理Static Batching:只要是静态不动的物体且具有相同材质的话就可以使用静态批处理来降低描绘调用
  2. 动态批处理Dynamic Batching:动态批处理是引擎自动进行,无需设置,当物体共享相同的材质,则引擎就会自动对Drawcall进行优化,也就是动态批处理(如实例化预制体)。动态批处理存在约束,稍有不慎就会增加Drawcall

动态批处理有很多约束:顶点数、缩放、不同材质等约束都不会自动批处理,所以尽量使用静态批处理。

2)UGUI需将同一界面的UI元素打包成图集。

物理组件

1) 处理Rigidbody时,使用FixedUpdate,设置Fixed timestep(固定时间步),减少物理计算次数,运动起来也平滑,提高游戏性能。

2)减少FPS,即减少每秒的帧数,在ProjectSetting-> Quality中的VSync Count 参数会影响你的FPS,EveryVBlank相当于FPS=60,EverySecondVBlank = 30;这两种情况都不符合游戏的FPS的话,或通过代码手动设置。
降低FPS的好处:
1.省电,减少手机发热的情况;
2.能稳定游戏FPS,减少出现卡顿的情况。

3)尽量不用MeshCollider

如果可以的话,尽量不用MeshCollider,以节省不必要的开销。如果不能避免的话,尽量用减少Mesh的面片数,或用较少面片的来代替。

4)粒子组件,屏幕上最大粒子数量建议小于200个,并关闭粒子的碰撞功能。

GC

虽然GC是用来处理内存,即回收垃圾的,但是却会增加CPU的开销。首先我们要明确所谓的GC是Mono运行时的机制,而非引擎的机制,而它管理的也是Mono的托管堆,而非引擎的本机堆。所以,GC不是用来处理引擎的assets(纹理,音效等等)的内存释放的,因为U3D引擎也有自己的内存堆而不是和Mono一起使用所谓的托管堆。其次我们要搞清楚什么东西会被分配到托管堆上?就是引用类型咯。比如类的实例、字符串、数组等等;而作为int,float,包括结构体struct其实都是值类型,它们会被分配在堆栈上而非堆上。所以我们关注的对象无外乎就是类实例、字符串、数组这些了,所以GC的优化说白了也就是代码的优化。

此部分的代码优化只针对是否会触发GC:

1)字符串处理。如需多次用String的+运算符来拼接字符串,就用StringBuilder的Append方法。

  • 18
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值