A physics articulation is a set of Articulation Bodies organized in a logical tree, in which each parent-child relationship reflects mutually constrained relative motion.
The main purpose of physics articulations is to provide a realistic physics behavior for commercial and industrial non-gaming applications that involve joints. For example, they make it a lot easier than the regular Joints to simulate robotic arms and kinematic chains.
在用一个关节连接两个物理体的最基本场景中,您可以构建一个接合或使用常规关节,如下表所述。
接合设置 | 使用常规关节设置 | |
---|---|---|
层级视图 | • 游戏对象 + 接合体 • 游戏对象 + 接合体 |
• 游戏对象 + 刚体 • 游戏对象 + 刚体 + 关节 |
关系 | 游戏对象具有层级关系(父子)。 注意:物理引擎使用 Unity 变换层级视图来表达父子关系。 |
游戏对象不一定具有层级关系。 注意:在更高级的场景中,您可以自由模拟运动环路。 |
物理体 | 两个游戏对象都有一个接合体组件,它定义了物理体属性(等等)。 | 两个游戏对象都有一个刚体组件,它定义了物理体属性(等等)。 |
Joint | 子游戏对象的接合体包含关节属性,您可以在其中选择关节类型。 | 其中一个游戏对象也有一个关节组件。关节属性取决于您添加的关节组件的类型。 |
但是,两种情况下的总体结果行为并不相同,尤其是如果您将此原则扩展到多个物理体和关节。
如果您尝试使用常规关节对运动链进行建模,例如在布娃娃、机械臂或具有多个并行铰链的机构中,物理引擎可能会遇到无法求解的情况并遗留一些无法满足的约束。这可能会导致卡顿和不切实际的运动。这些关节不仅看起来很怪异,而且也不可能将它们用于模拟真实设备,从而阻碍对工业设计进行建模或原型构建。
要在 Unity 中构建物理接合,您必须向构成接合的每个游戏对象添加一个接合体组件。每个接合体组件的配置都可以集中在一个位置进行:
对应的游戏对象的物理体属性。基本上,它的质量及其对物理环境的响应方式。
将游戏对象链接到其父游戏对象的关节的类型和属性(接合的根除外)。
下面的例子显示了一个简单的物理接合,涉及 3 个物理体和 2 个关节:
要在 Unity 中构建这样的接合:
创建 3 个游戏对象的线性层级结构。
分别为这 3 个游戏对象添加一个接合体组件。
配置每个接合体组件(根据上图):
GameObject | 接合体组件配置 |
---|---|
A(根) | 您只能为游戏对象 A 定义物理体属性。 |
B | 您可以定义: • 游戏对象 B 的物理体属性。 • 与游戏对象 A 连接的关节的类型和属性。 |
C | 您可以定义: • 游戏对象 C 的物理体属性。 • 与游戏对象 B 连接的关节的类型和属性。 |
注意:根据定义,一个接合只能有一个根,并且不允许有运动环路。如果您需要运动环路,请使用常规关节。
局限性:如果您想构建非常长的接合链,仍需注意 Unity 支持的最大层级深度为 64 个游戏对象。
通过接合体,您可以选择和配置四种类型的接合关节:
固定关节:在物理体之间设置刚性、牢不可破和不可拉伸的链接。
棱形关节:阻止除了沿特定轴滑动之外的所有运动。
旋转关节:允许绕特定轴旋转(如铰链)。
球形关节:解剖学关节,允许两个摆动和一个扭转。
接合中所有锁定的自由度在设计上都是牢不可破和不可拉伸的。为了实现这一点,物理引擎使用降维坐标空间,物理体只有关于未锁定运动轴的坐标。
相比之下,对于常规迭代关节,物理引擎采用最大坐标空间,只有当求解器能够在一组迭代后收敛,才能保证满足约束。
查看 Unity 的机器人演示项目试验带有接合关节的串联机械臂。