Hugo Future Imperfect Slim

L-Lawliet's Blog

记录游戏开发的点点滴滴

Unity性能优化技巧汇总

Unity性能优化技巧汇总

Lawliet

Colourful

汇总一些简单的性能优化技巧

Physics(物理)

减少FixedUpdate调用次数

FixedUpdate是采用固定的调用间隔:Time.fixedDeltaTime,由于是固定调用间隔,因此每帧的调用次数实际上是通过Time.deltaTime/Time.fixedDeltaTime计算出来的,如果当前帧卡顿了,那么FixedUpdate很大可能(超过Time.fixedDeltaTime)会增加调用次数,情况会更糟。

而通过设置Time.maximumDeltaTime,可以将把次数减少。最终次数为Min(Time.deltaTime, Time.maximumDeltaTime)/Time.fixedDeltaTime,例如默认为0.333,则单帧最大调用次数可以达到17次,而如果改成0.100,则单帧最大调用次数会降到5次。

有两种修改方式:

  • 通过菜单:ProjectSetting > Time > Maximum Allowed Timestep修改 1
  • 通过代码:Time.maximumDeltaTime 2

Maximum Allowed Timestep

去除physics.processing

即使没有用到物理碰撞功能,但物理逻辑仍然会运行,会产生耗时。这个时候可以关闭Physics.autoSimulation来减少这部分耗时。3
关闭Physics.autoSimulation后,如果需要射线检测,则需要开启Physics.autoSyncTransforms或者手动调用**Physics.SyncTransforms()**来将Transform的变更同步到物理引擎。

Physics.autoSimulation

Physics.autoSyncTransforms有两个常见的耗时堆栈:Physics.SyncColliderTransformPhysics.SyncRigidbodyTransform,都是在Transform发生变化时才会有计算。

Physics.autoSyncTransforms


  1. Time, https://docs.unity3d.com/Manual/class-TimeManager.html ↩︎

  2. Time.maximumDeltaTime, https://docs.unity3d.com/ScriptReference/Time-maximumDeltaTime.html ↩︎

  3. 如果Unity没有用到物理部分,应该如何关闭?, https://answer.uwa4d.com/question/6285b2a7b87a4573515d6387 ↩︎

最新文章

分类

关于

记录游戏开发的点点滴滴