关节 (Joints)
关节提供了限制,从而消除了物体(body)的自由度,并用于连接成对的body。每个关节都有一个锚点,默认情况下,该锚点位于连接实体的质心之间。每个连接的属性取决于所选的关节类型及其参数。联合参数可以分为两组:
- 通用参数 -所有关节共享的基本参数集。
- 类型特定的参数-每种关节类型的一组特定参数。
也可以看看#
编程实现:
- Joint类
- JointFixed类
- JointHinge类
- JointBall类
- JointPrismatic类
- JointCylindrical类
- JointWheel类
- JointSuspension类 (Deprecated)
- JointPath类
- JointParticles类
用法示例:
添加关节#
假设您有两个分配了物理物体的对象。请记住,物体必须具有指定的形状。要通过 UnigineEditor 使用关节来连接它们,请执行以下步骤:
- 打開 World Hierarchy 窗口。
- 选择第一个要连接的物体
- 转到 Parameters窗口中的Physics選項卡。
在Joints部分中,单击
,然后选择适当的关节类型。
- 在对话框窗口中选择第二个物体的名称,然后单击OK。
- 在Joints部分中设置关节参数。
您可以通过选中Helpers面板→Physics项目→Joints选项(应启用Visualizer)来启用关节的可视化。
通用关节参数#
![]() |
通用关节参数
|
所有关节,无论其类型如何,都有一族通用的参数:
Type | 关节的类型。创建后可以更改,而名称将保持不变。 |
Collision | 一个标志,指示是否在连接的物体之间启用碰撞检测。 |
Iterations | 关节像碰撞一样被迭代计算。此参数指定用于求解关节的迭代次数。请注意,如果此值太低,则会影响计算的精度。 |
Max Force | 可以在关节上施加的最大力。如果超过此限制,则关节会断裂。默认值为 inf ,即关节是不可破坏的。 |
Max Torque | 可以施加在关节上的最大扭矩。如果超过此限制,则关节会断裂。默认值为 inf ,即关节是不可破坏的。 |
Linear Restitution |
关节的线性刚度。定义补偿两个物体之间线性坐标变化的速度。将物体拉开时,恢复力控制施加在两个物体上的力的大小,以使它们的锚点再次对齐。
注意
1 的最大值可能导致物理不稳定(因为施加的力过大)。 |
Angular Restitution |
关节的角刚度。定义补偿两个物体之间角度变化的速度。当物体彼此相对旋转时,恢复力控制施加到两个物体的力的大小,以使它们的锚点再次对齐。
注意
1 的最大值可能导致物理不稳定(因为施加的力过大)。 |
Linear Softness |
关节的线弹性。定义在拉伸关节时是否将实体的线速度平均化。
|
Angular Softness |
关节的角度弹性。定义在扭曲关节时是否将实体的线速度平均化。
|
Anchor 0 Node | 连接到关节的第一个物体的节点。这是当前节点,无法更改。 |
Anchor 0 Position | 第一个连接物体的锚点在其局部坐标系中的位置。 |
Anchor 1 Node | 连接到关节的第二个物体的节点。可以通过从世界节点层次结构中拖动具有物理体的节点来更改此节点。 |
Anchor 1 Position | 第二个连接物体的锚点在其局部坐标系中的位置。 |
Fix 0 | 将 Anchor 0 的位置调整为与 Anchor 1 的位置匹配。 |
Fix 1 | 将 Anchor 1 的位置调整为与 Anchor 0 的位置匹配。 |
Fix 01 | 将两个锚点移动到它们之间连线的中点位置。 |
为了组织关节,提供了以下选项:
![]() |
添加新关节。 |
![]() |
一对按钮,用于在列表中向上或向下移动关节。 |
![]() |
删除所选关节。 |
要禁用某个关节,请取消选中复选框:
Fixed Joint#
固定关节以严格保持彼此位置的方式连接两个物体。
![]() |
Fixed Joint
|
除了通用参数外,固定关节还具有以下约束参数:
Anchor 0 Rotation | 第一个实体相对于锚点的方向。 |
Anchor 1 Rotation | 第二个实体相对于锚点的方向。 |
有关更多信息,请参见JointFixed类描述。 此处。
在我们的物理视频教程中观看固定关节的插图。
Hinge Joint#
铰链关节允许连接的实体在锚点处沿关节的轴旋转。该关节连接了一个有角度的 motor 。
![]() |
![]() |
Hinge Joint
|
除了通用参数外,铰链关节还具有以下约束参数:
![]() |
Hinge Joint参数
|
Anchor 0 Axis | 第一个连接物体的轴,由归一化向量表示。 |
Anchor 1 Axis | 第二个连接物体的轴,由归一化向量表示。 |
Damping | 铰链接头的角阻尼系数。 |
From | 铰链停止运动范围内的最小角度。角度在[ -180 中以度为单位指定; 180 ]范围。 |
To | 铰链停止运动范围内的最大角度。角度在[ -180 中以度为单位指定; 180 ]范围。 |
Velocity | 附加角电机的目标速度。 |
Torque | 角度电机的最大扭矩。 0 拆下电动机。 |
Angle | 附加角弹簧的目标角度。弹簧(如果已启用)将尝试使连接的物体之间保持指定的角度。 |
Spring | 弹簧刚度系数确定关节抵抗旋转的强度。如果将刚度设置为 0 ,则会禁用弹簧。 |
有关更多信息,请参见JointHinge类描述。可以在此处找到使用铰链接头连接两个物体的示例。
在我们的物理视频教程中观看铰链关节设置的图示。
Ball Joint#
球形接头提供了一个连接对象可以围绕其旋转的点。
![]() |
![]() |
Ball Joint
|
除了通用参数外,球形接头还具有以下约束参数:
![]() |
Ball Joint参数
|
Anchor 0 Axis | 第一个连接物体的轴,由归一化向量表示。 |
Anchor 1 Axis | 第二个连接物体的轴,由归一化向量表示。 |
Damping | 球形接头的角阻尼系数。 |
Angle | 摆动角度限制,指定连接的物体可以从关节轴弯曲多少。 |
From | 围绕关节轴扭转范围内的最小角度。角度在[ -180 中以度为单位指定; 180 ]范围。 |
To | 在围绕关节轴的扭曲范围内的最大角度。角度在[ -180 中以度为单位指定; 180 ]范围。 |
有关更多信息,请参考 JointBall类描述。可以在此处找到使用球形接头连接两个物体的示例。
在我们的物理视频教程中观看球形关节设置的图示。
Prismatic Joint#
棱形关节允许沿关节轴移动。该关节具有连接的线性 motor 。
![]() |
![]() |
Prismatic Joint
|
除了通用参数外,棱形关节还具有以下约束参数:
![]() |
Prismatic Joint参数
|
Anchor 0 Axis | 第一个连接物体的轴,由归一化向量表示。 |
Anchor 0 Rotation | 第一个实体相对于锚点的方向。 |
Anchor 1 Rotation | 第二个实体相对于锚点的方向 |
Damping | 棱柱形接头的线性阻尼系数。 |
From | 物体之间沿关节轴的最小距离。 |
To | 物体之间沿关节轴的最大距离。 |
Velocity | 附加直线电机的目标速度。 |
Force | 连接的直线电动机的最大力。 0 拆下电动机。 |
Distance | 所连接弹簧的目标线性距离。弹簧(如果启用)会尝试保持连接的实体之间的指定距离。 |
Spring | 弹簧刚度系数,确定接头抵抗线性运动的强度。如果将刚度设置为 0 ,则会禁用弹簧。 |
有关更多信息,请参见JointPrismatic类描述。可以在此处找到使用棱镜连接两个物体的示例。
在我们的物理学视频教程中观看棱柱关节的图示。
Cylindrical Joint#
圆柱关节就像棱柱形关节一样,具有额外的自由度:绕关节轴旋转。该关节具有线性和成角度的电动机。
![]() |
![]() |
Cylindrical Joint
|
除了通用参数外,圆柱关节还具有以下约束参数:
![]() |
Cylindrical Joint参数
|
Anchor 0 Axis | 第一个连接物体的轴,由归一化向量表示。 |
Anchor 1 Axis | 第二个连接物体的轴,由归一化向量表示。 |
Linear Damping | 圆柱接头的线性阻尼系数。 |
Linear From | 物体之间沿关节轴的最小距离。 |
Linear To | 物体之间沿关节轴的最大距离。 |
Linear Velocity | 附加直线电机的目标速度。 |
Linear Force | 连接的直线电动机的最大力。 0 拆下电动机。 |
Linear Distance | 所连接弹簧的目标线性距离。弹簧(如果启用)会尝试保持连接的实体之间的指定距离。 |
Linear Spring | 弹簧刚度系数,确定接头抵抗线性运动的强度。如果将刚度设置为 0 ,则会禁用弹簧。 |
Angular Damping | 圆柱接头的角阻尼系数。 |
Angular From | 围绕关节轴扭转范围内的最小角度。角度在[ -180 中以度为单位指定; 180 ]范围。 |
Angular To | 在围绕关节轴的扭曲范围内的最大角度。角度在[ -180 中以度为单位指定; 180 ]范围。 |
Angular Velocity | 附加角电机的目标速度。 |
Angular Torque | 角度电机的最大扭矩。 0 拆下电动机。 |
Angular Angle | 所连接的角弹簧的目标角度。弹簧(如果已启用)将尝试使连接的物体之间保持指定的角度。 |
Angular Spring | 弹簧刚度系数确定关节抵抗旋转的强度。如果将刚度设置为 0 ,则会禁用弹簧。 |
有关更多信息,请参见JointCylindrical类描述。 此处。
在我们的物理视频教程中观看圆柱关节的插图。
Wheel Joint#
车轮关节用于制造射线铸型的车轮。它连接两个刚性实体:第一个实体是框架,第二个实体是轮子。无需为车轮指定形状:射线投射用于检测车轮与表面的碰撞。该关节连接了一个有角度的 motor 。
使用车轮关节连接物体的顺序很重要!
-
如果物体使用 UnigineEditor 连接:
- 选择车架。
- 添加车轮关节。
- 指定要安装的轮子。
-
如果物体以编程方式连接:
- b0是一个车架。
- b1 是一个车轮.
![]() |
![]() |
Wheel Joint |
除了通用参数外,车轮关节还具有以下约束参数:
![]() |
Wheel Joint参数 |
Anchor 00 Axis | 垂直轴(悬架轴)的坐标,其作用类似于提供转向和阻尼的圆柱关节。 |
Anchor 10 Axis | 在车架(即body 0)的坐标系中,车轮旋转的水平轴坐标。 |
Anchor 11 Axis | 在车轮(即body 1)的坐标系中,车轮旋转的水平轴坐标。 |
Linear Damping | 悬架的线性阻尼系数。 |
Linear From | 悬架行驶下限。 |
Linear To | 悬架行驶上限。 |
Linear Distance | 目标悬架高度。悬架弹簧(如果启用)会尝试保持指定的高度。 |
Linear Spring | 悬架弹簧刚度系数确定关节抵抗垂直线性运动的强度。如果将刚度设置为0,则会禁用弹簧。 |
Angular Damping | 车轮旋转的角阻尼系数。 |
Angular Velocity | 附加角电机的目标速度。 |
Angular Torque | 角度电机的最大扭矩。 0拆下电动机。 |
Tangent Angle | 指定最佳纵向力可实现速度的系数。该值越大,轮胎产生的冲量越大。 |
Tangent Friction | 轮胎的纵向(前进方向)摩擦力。 |
Binormal Angle | 指定最佳侧向力可实现速度的系数。该值越大,轮胎产生的冲量越大。 |
Binormal Friction | 轮胎的侧向(横向)摩擦力。 |
Wheel Mass | 附加车轮的质量。 |
Wheel Threshold | 车轮与地面速度之间的阈值差。当该值过小时,纵向力会被按比例减小,以防止不自然的振动。 |
Wheel Radius | 附加车轮的半径。 |
有关更多信息,请参见JointWheel类描述。有关说明使用车轮节的示例,请参见使用车轮节创建汽车文章。
在我们的物理视频教程中,观看如何使用Wheel关节模拟车轮。
Suspension Joint#
悬挂关节用于制造车辆的车轮悬架。它连接两个刚性实体:第一个实体是框架,第二个实体是轮子。该关节连接了一个有角度的 motor 。
使用粒子关节连接物体的顺序很重要!
-
如果物体使用 UnigineEditor 连接:
- 选择车架。
- 添加悬架接头。
- 指定要安装的轮子。
-
如果物体以编程方式连接:
- b0是一个车架。
- b1 是一个车轮.
![]() |
![]() |
Suspension Joint
|
除了通用参数外,悬挂关节还具有以下约束参数:
![]() |
Suspension Joint参数
|
Anchor 00 Axis | 垂直轴(悬架轴)的坐标,其作用类似于提供转向和阻尼的圆柱关节。 |
Anchor 10 Axis | 在车架(即body 0)的坐标系中,车轮旋转的水平轴坐标。 |
Anchor 11 Axis | 在车轮(即body 1)的坐标系中,车轮旋转的水平轴坐标。 |
Linear Damping | 悬架的线性阻尼系数。 |
Linear From | 悬架行驶下限。 |
Linear To | 悬架行驶上限。 |
Linear Distance | 目标悬架高度。悬架弹簧(如果启用)会尝试保持指定的高度。 |
Linear Spring | 悬架弹簧刚度系数确定关节抵抗垂直线性运动的强度。如果将刚度设置为 0 ,则会禁用弹簧。 |
Angular Damping | 车轮旋转的角阻尼系数。 |
Angular Velocity | 附加角电机的目标速度。 |
Angular Torque | 角度电机的最大扭矩。 0 拆下电动机。 |
有关更多信息,请参见JointSuspension类描述。可以在此处找到使用悬架关节连接两个物体的示例。
有关悬架和车轮关节之间的区别,请参见我们的有关物理的视频教程。
Path Joint#
路径关节用于将刚体附加到路径体,并使其沿该路径移动。该接头可用于使火车沿着轨道移动。该关节具有连接的线性 motor 。
将形状分配给刚体,然后再将其连接到路径体!
使用路径关节连接物体的顺序很重要!
- 如果物体使用 UnigineEditor 连接:
- 选择刚体。
- 添加路径关节。
- 指定路径物体。
- 如果物体以编程方式连接:
- b0 是一个 BodyRigid。
- b1 是一个 BodyPath。
![]() |
Path Joint
|
除了通用参数外,路径关节还具有以下约束参数:
![]() |
Path Joint参数
|
Anchor 0 Rotation | 指定物体相对于路径的方向。 |
Damping | 路径关节的线性阻尼系数。 |
Velocity | 附加直线电机的目标速度。 |
Force | 连接的直线电动机的最大力。 0 拆下电动机。 |
有关更多信息,请参见JointPath类描述。可以在此处找到使用路径关节连接两个物体的示例。
我们的物理视频教程显示了如何使用“路径”关节将刚体连接到路径体。
Particles Joint#
粒子关节用于将衣服物体或绳索物体固定到刚性物体,布娃娃物体或虚拟物体。
使用粒子关节连接物体的顺序很重要!
-
如果物体使用 UnigineEditor 连接:
- 选择刚体,布娃娃体或虚拟体。
- 添加粒子关节。
- 指定布料物体或绳索物体。
-
如果物体以编程方式连接:
- b0 是一個 BodyRigid / BodyRagdoll / BodyDummy。
- b1 是一個 BodyCloth / BodyRope。
![]() |
Particles Joint
|
除了通用参数外,粒子关节还具有以下约束参数:
![]() |
Particles Joint参数
|
Size | 指定将布料或绳索物体的顶点固定到另一个物体的区域。 |
Threshold | 确定将布料或绳索物体的顶点固定到另一个物体的距离。如果顶点之间的距离小于阈值,它们将被固定在一起;否则,粒子将保持松散状态。 |
有关更多信息,请参见JointParticles类描述。可以在此处找到一个示例,该示例说明了使用粒子关节连接衣服物体。
我们的物理视频教程展示了如何使用“粒子”关节将绳索或布料连接到其他物体。
马达和弹簧#
关节可以具有与之关联的电动机和弹簧。
弹簧尝试使物体与关节保持一定的距离(线性)或角度(角度)。特定弹簧的性能取决于其刚度和阻尼系数。
电动机通过向关节的自由度施加扭矩(或力),使与关节连接的物体彼此相对运动或旋转。有 linear 和 angular 个电动机会向关节施加有限的力,推动或旋转连接的物体。
电动机具有两个参数:
- Target velocity
- 达到该速度的最大力(或扭矩)。
这是现实生活中的电机非常简单的模型。但是,在建模电动机时非常有用,该电动机在连接到关节之前先用齿轮箱减速。此类设备通常是通过设置目标速度来控制的,并且只能产生最大功率以达到该速度(这对应于关节处可用的一定量的力)。
要启动角度电动机,请执行以下步骤:
-
设置angular velocity-电动机的目标角速度,该值确定电动机可以旋转的速度。
- 正值-电动机逆时针旋转。
- 负值-电动机顺时针旋转。
-
设置angular torque-电机达到目标速度所施加的最大转矩。该值确定电动机达到最大速度的速度。
- 0 禁用电动机。
- 如果提供负值,则将使用 0 。
要启动线性电动机,请执行以下步骤:
-
设置linear velocity-电动机的目标线速度,该值确定电动机可以推动多快。
- 正值-电动机向前推动。
- 负值-电动机向后拉动。
-
设置linear force-电机达到目标速度所施加的最大力。该值确定电动机达到最大速度的速度。
- 0 禁用电动机。
- 如果提供负值,则将使用 0 。
汽车#
车辆在实时游戏中很重要,因此,将分别对其进行描述。有两种模拟移动车辆的方法。每种方法都有对应的关节类型,用于将车轮连接至车身。
- 第一种方法使用suspension joint并假定将车轮表示为具有形状的物理物体。由于每个车轮都具有对撞机形状,因此可以正确处理与地面上的物体的碰撞。例如,这种汽车在路缘上平稳行驶。这种方法需要进行更多的计算,并且在需要更精确的仿真时尤其是对于阶状地面和形状复杂的车轮时应使用。
- 第二种方法使用wheel joint并假定车轮是虚拟的。车轮不会与路面碰撞。取而代之的是,将射线从车身投射下来以检测表面不平整。在这种情况下,不能正确处理地形的陡峭变化。这种方法比第一种更快,并且可以为平滑地形提供可接受的结果,例如用于赛车模拟。但是,在越野地形上,它可能无法正常工作。
两个关节都有一个与它们关联的 motor ,它使车轮旋转并向前推动车辆。
本页面上的信息适用于 UNIGINE 2.20 SDK.