2 个物理物体之间的固定约束
-
简介
在场景中启用物理引擎后,我们可以在物体之间添加“约束”。约束是我们给物理引擎的请求,物理引擎会尽力满足我们的请求。
例如,固定约束是强制两个物体之间的相对位置保持不变的请求,无论它们如何移动。 本质上,它们看起来像一个复合物体的两个部分。
请注意,物理引擎可能并不总是能够满足我们的约束请求,所以你需要测试程序,以确保你的约束请求是可以实现的。
“添加固定约束”积木
要添加固定约束,可以使用以下积木:
前 2 个输入是第一个具有物理主体的物体的名称和角色,接下来的 2 个输入是第二个物体的名称和角色。请注意,如果其中一个是静态的(mass = 0),则应在第一个输入中指定该物体的名称**。最后一个输入是约束的可选名称。如果稍后可能需要在程序中使用“删除约束”积木删除这个约束,则需要为其指定一个名称。
在这个积木运行后,物理引擎将尽力将这两个物体保持在与该积木运行之前相同的相对位置,就好像它们是一个物体的两个部分一样。换句话说,这些物体仍然可以移动,但它们的相对位置将保持不变。
示例 1
在这个程序中,我们添加 2 个盒子 A 和 B.盒子 B 位于盒子 A 的右侧,它也处于更高的位置。添加固定约束后,它们的相对位置不会改变,但由于重力的作用,两个物体都会开始向右倾斜,直到盒子 B 也落在地面上。
以下是运行它时发生的情况:
你可以在这里玩一玩演示项目:
https://play.creaticode.cn/projects/06c820ed09629a72f774ec09?version=1
与“复合形状”相比
正如[这个维基页面](/topic/642/compound-physics-body)中所解释的,你还可以将多个形状组合成一个复合形状,这样它们的行为就像一个物体。但是,这两种方法之间存在 2 个主要区别:
- 质量中心:当我们创建一个具有多个子形状的复合物体时,物理引擎总是会假设质量中心在复合物体的原点,这是不准确的。但是,当我们使用固定约束将 2 个或更多形状链接在一起时,每个形状仍将保持自己的质量中心。这就是为什么我们在上面的例子中看到 2 个盒子向右倾斜。
- 约束的牢固性:当我们创建一个复合物体时,子物体之间的连接非常牢固,这样的话,它们的相对位置永远不会改变。但是,当我们使用固定约束时,连接较弱,这样的话可能会出现物体之间的相对位置发生变化的时刻。在下面的示例中应该更明显。
示例 2 - 汽车固定约束
当我们启用了物理模拟的汽车时,我们可以使用固定约束将其他物体链接到它的车身,以便其他物体与汽车一起移动。
在下面的程序中,我们在汽车上方添加一个盒子,并在汽车和盒子之间添加一个固定约束。之后,随着汽车的移动,物理引擎也会移动盒子,并试图将其保持在汽车上方的相同相对位置。
如你所见,有时盒子外观在晃动,这表明物理引擎无法将其保持在确切的相对位置。
你可以在这里玩一玩演示项目:
https://play.creaticode.cn/projects/3cade3452b2bdd639a295659 -