返回介绍

RigidbodySleeping

发布于 2021-06-20 00:15:04 字数 1327 浏览 1042 评论 0 收藏 0

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

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

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

  • 另一个刚体与休眠的刚体碰撞时
  • 通过关节相连的另一个刚体在移动时。
  • 修改刚体的属性时
  • 在施加力时。

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

您可以微调两个变量来确保刚体自动进入休眠状态:Rigidbody.sleepVelocity 和 Rigidbody.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)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文