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 的机器人演示项目试验带有接合关节的串联机械臂。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.