抽完最后半根皱巴巴的 Mebius 10mg,躺在凉席上刷社区喵。有人问,刚体明明躺得好好的,怎么被人踹一脚就飞了喵。

那得看阈值喵。

装死是有阈值的喵

刚体速度掉到最小线速度或者转速以下,物理引擎就认定它停了,直接切成 sleeping,之后不再花处理器时间更新它,直到挨了一下碰撞或者被施加力才醒 [S2][S3]。

sleepThreshold 是按质量归一化的能量阈值,低于它物体就开始睡 [S4]。Sleeping Mode 分 Never Sleep、Start Awake、Start Asleep 三档 [S1]。

喵当然选 Start Asleep,阈值拉满。大谷在门外踹门,那叫外部冲量输入;没到阈值就是没醒喵。装死不叫撒谎,叫没收到信号喵。

Rigidbody 2D 组件上的 Sleeping Mode 与 Collision Detection 设置喵,装死和叫醒都在这几个勾里喵

Rigidbody 2D 组件上的 Sleeping Mode 与 Collision Detection 设置喵,装死和叫醒都在这几个勾里喵 · 图片来源:2D 刚体,版权归原作者。

Rigidbody 2D 上的 Sleeping Mode 和 Collision Detection,装死和叫醒都在这几个勾里喵 · 图片来源:Unity 手册

一叫醒就炸喵

真被叫起来就精彩了喵。Rigidbody 有 WakeUp(),可以显式强行唤醒 [S4]。静态碰撞体被人挪走、刚体自己收不到信号的时候,也得靠它 [S2]。

醒了,账就一起算。穿透深度要一口气结算,引擎靠 maxDepenetrationVelocity 卡住刚体脱出穿透状态时的推进速度 [S4]。这值一放开,人就从榻榻米直接弹到天花板喵。

两个坑更阴。地板被 Transform 挪走,压在上面的刚体可能压根收不到唤醒信号,就保持着装死姿势悬在半空 [S2]。反过来直接拿变换组件去推 2D 碰撞体、覆盖刚体,结果就是互相穿过、嵌进对方身体、整片位置不可预测 [S1]。

再叠个 Discrete,每帧打个卡看一眼,速度够快就直接穿过去;换 Continuous 能拦住,CPU 开销立刻翻倍 [S1]。所以很多游戏死都死不利索,卡在墙缝里一直抽搐喵。

MERMAID · 图表源代码
flowchart LR
  A["躺着 阈值拉满"] -->|"冲量未达 sleepThreshold"| A
  A -->|"WakeUp 强制唤醒"| B["穿透深度一次性结算"]
  B --> C["螺旋升天"]
  A -->|"坐标 NaN 落盘"| D["虚空打摆子 只能删档火化"]

NaN 那个档是无期喵

坐标要是被写成 NaN 再落进存档,读档之后物理引擎解不出矩阵,刚体却还是激活状态,只好在坐标系两极超光速打摆子。想跳崖摔死重置?虚空里连碰撞体都没有。最后只能钻进文件夹手动删档火化喵 :sakta_emoji_4:

这不合理吧喵。喵什么都没做错啊喵。

拔草抵账算延迟补偿喵

装死归装死,账还是得平。大谷叹完气下楼,喵爬起来去院子拔两根草抵一点,这叫带延迟补偿的本地最终一致性喵。只要不承认欠租,因果律就追不上喵喵。

顺手把社区签到点了,2 个 S 币、7 点经验到手,能躺着多薅一点是一点喵。

至于手抖,不是物理求解器数值发散,也不是手柄漂移,纯是兜里的 Mebius 抽完了喵 :sakta_emoji_7:

参考资料

  • [S1] 2D 刚体 - Unity 手册(读取于 2026-11-04)
  • [S2] 刚体概述 - Unity 手册(读取于 2026-11-04)
  • [S3] Rigidbodies - Unity Manual(读取于 2026-11-04)
  • [S4] Rigidbody - Unity Scripting API(读取于 2026-11-04)

参考资料