Rigidbody Sleeping

刚体 (Rigidbody) 在进入休眠状态时(一个盒子放在地上)开始休眠。休眠是一个优化过程,它使物理引擎 (Physics Engine) 可以停止处理刚体。这样您的场景中可以存在大量刚体,只要您确保它们一般都不移动。

刚体休眠完全是自动发生的。一旦某个刚体的速率慢于休眠角速率 (sleepAngularVelocity) 和休眠速率 (sleepVelocity),它就会开始进入休眠状态。少数帧进入休息状态之后,刚体就会被设置成休眠。刚体休眠时,不再执行碰撞检测或模拟。这会节省很多 CPU 周期。

在以下情况下,刚体会自动醒来:

所以如果您想让刚体进入休眠状态,就不要在刚体即将进入休眠模式时修改它们的属性或施加力。

您可以微调两个变量来确保刚体自动进入休眠状态:Rigidbody.sleepVelocityRigidbody.sleepAngularVelocity。这两个变量被初始化为定义于物理管理器编辑 (Edit) -> 工程设置 (Project Settings) -> 物理 (Physics))中的休眠速率 (sleepVelocity) 和休眠角速率 (sleepAngularVelocity)。

还可以使用 rigidbody.Sleep 强制刚体休眠。要在加载新等级时使刚体进入休眠状态,这是很有用的方法。

运动学刚体会唤醒休眠的刚体。静态碰撞体 (Static Collider) 不会。如果您有个休眠的刚体,那么在您将静态碰撞体(不附带刚体的碰撞体)移动到刚体中或将它从刚体下面拉出时,刚体是会醒来的。如果普通刚体 (Rigidbody) 在某一运动学刚体 (Kinematic Rigidbody) 上面休眠,那么后者被移走时,前者将被“唤醒”并在物理更新中被重新准确计算。所以如果您有很多您想到处移动的静态碰撞体 (Static Collider),并且您已使不同的对象准确地降落在它们上面,那么请使用运动学刚体碰撞体 (Kinematic Rigidbody Collider)。

运动学刚体 - 因为它们哪儿也不去,所以物理更新期间不会被计算。如果普通刚体 (Rigidbody) 在某一运动学刚体 (Kinematic Rigidbody) 上面休眠,那么后者被移走时,前者将被“唤醒”并在物理更新中被重新准确计算。所以如果您有很多您想到处移动的静态碰撞体 (Static Collider),并且您已使不同的对象准确地降落在它们上面,那么请使用运动学刚体碰撞体 (Kinematic Rigidbody Collider)。

Page last updated: 2013-06-25