title: Defold 中的物理系统
Defold 包含一个修改版的 Box2D 物理引擎(版本 2.2.1)用于 2D 物理模拟和 Bullet 物理引擎(版本 2.77)用于 3D 物理。它允许您模拟不同类型 碰撞对象 之间的牛顿物理交互。本手册解释了其工作原理。
Defold 中使用的物理引擎的主要概念是:
除了碰撞对象本身,您还可以定义碰撞对象 约束,更常称为 关节,以连接两个碰撞对象并限制或以其他方式施加力并影响它们在物理模拟中的行为。了解有关关节的更多信息。
您还可以探测并沿着称为 射线投射 的线性射线读取物理世界。了解有关射线投射的更多信息。
物理引擎模拟牛顿物理,它被设计为与米、千克和秒(MKS)单位一起使用良好。此外,物理引擎被调整为适用于大小在 0.1 到 10 米范围内的移动物体(静态物体可以更大),默认情况下,引擎将 1 单位(像素)视为 1 米。这种像素和米之间的转换在模拟级别上很方便,但从游戏创建的角度来看,它并不是很有用。使用默认设置时,大小为 200 像素的碰撞形状将被视为具有 200 米的大小,这超出了推荐范围,至少对于移动物体来说是如此。
通常,需要缩放物理模拟以使其与游戏中对象的典型大小良好配合。物理模拟的比例可以在 game.project 中通过 物理比例设置 进行更改。将此值设置为例如 0.02 将意味着 200 像素将被视为 4 米。请注意,重力(也在 game.project 中更改)必须增加以适应比例的变化。
建议以固定间隔更新物理引擎以确保稳定的模拟(而不是以可能不规则的帧率相关间隔更新)。您可以通过检查 game.project 文件中物理部分的 使用固定时间步长设置 来对物理使用固定更新。更新频率由 game.project 文件中引擎部分的 固定更新频率设置 控制。当对物理使用固定时间步长时,还建议使用 fixed_update(self, dt)
生命周期函数与游戏中的碰撞对象进行交互,例如在向它们施加力时。
集合代理 : 通过集合代理,可以将多个顶级集合或 游戏世界 加载到引擎中。这样做时,重要的是要知道每个顶级集合都是一个独立的物理世界。物理交互(碰撞、触发器 和 射线投射)只发生在属于同一世界的对象之间。因此,即使来自两个世界的碰撞对象在视觉上恰好彼此重叠,它们之间也不会有任何物理交互。
未检测到碰撞 : 如果您在碰撞未被正确处理或检测方面遇到问题,请务必阅读 调试手册中的物理调试部分。