- Hinge Joint(铰链关节组件)
- Fixed Joint(固定关节组件)
- Spring(弹簧关节组件)
- Character Joint(角色关节组件)
- Configurable Joint(可配置关节组件)
- Joint API
- 参见 Unity 常用 API
- 参见 Unity 常用 API
- Joint API
Hinge Joint(铰链关节组件)
铰链关节由两个刚体组成,该关节会对刚体进行约束,使得它们就好像被连接在一个铰链上那样运动。它非常适用于对门的模拟,也适用于对模型链及钟摆等物体的模拟。
属性 | 说明 |
---|---|
Connected Body | 连接刚体。(该项用于为关节指定要连接的刚体,若不指定则该关节将与世界相连接) |
Anchor | 锚点。(刚体可围绕锚点进行摆动,这里可以设置锚点的位置,该值应用于局部坐标系) |
Axis | 轴。(定义了刚体摆动的方向,该值应用于局部坐标系) |
Use Spring | 使用弹簧。(勾选该项,则弹簧会使刚体和与其链接的主体形成一个特定的角度。) |
Spring | 弹簧。当 Use Spring 参数开启时此属性有效。 |
• Spring | 弹簧力。该项用于设置推动对象使其移动到相应位置的作用力。 |
• Damper | 阻尼。 |
• Target Position | 目标角度。该项用于设置弹簧的目标角度,弹簧会拉向此角度,以度为测量单位。 |
UseMotor | 使用马达。勾选此项,马达会使对象发生旋转。 |
Motro | 马达。当 Use Motor 参数开启时,此属性会被用到。 |
• Target Velocity | 目标速度。该项用于设置对象预期将要达到的速度值。 |
• Force | 作用力。该项用于设置为了达到目标速度而施加的作用力。 |
• Free Spin | 自由转动。勾选此项,则马达永远不会停止,旋转只会越来越快。 |
Use Limits | 使用限制。勾选此项,则铰链的角度将被限定在最大值和最小值之间。 |
Limits | 限制。当 Use Limits 开启时,此属性将会被用到。 |
• Min | 最小值。该项用于设置铰链能达到的最小角度。 |
• Max | 最大值。该项用于设置铰链能达到的最大角度。 |
• Min Bounce | 最小反弹。该项用于设置当对象触到最小限制时的反弹值。 |
• Max Bounce | 最大反弹。该项用于设置当对象触到最大限制时的反弹值。 |
Break Force | 断开力。该项用于设置铰链关节断开的作用力。 |
Break Torque | 断开转矩。该项用于设置断开铰链节点所需的转矩。 |
单独的铰链关节要应用到一个游戏对象上,铰链或绕着 Anchor 属性所指定的点来旋转,按照 Axis 属性指定的轴来移动。不用给关节的 Connected Body 属性添加对象,只有当希望关节的 Transform 属性依赖于附加对象的 Transform 属性时才为关节的 Connected Body 属性来添加对象。多个铰链关节也可以串联起来形成一条链条,可以给链条的每一个环添加关节,并向 Connected Body 那样添加到下一环上。
Fixed Joint(固定关节组件)
固定关节组件用于约束一个游戏对象对另一个游戏对象的运动。类似于对象的父子关系,但它是通过物理系统来实现而不像父子关系那样是通过 Transform 属性来进行约束。固定关节适用于以下的情形:当希望将对象较容易与另一个对象分开时,或者连接两个没有父子关系的对象使其一起运动,使用固定关节的对象自身需要有一个刚体组件。
属性 | 说明 |
---|---|
Connected Body | 连接刚体。(该项用于为关节指定要连接的刚体,若不指定则该关节将与世界相连接) |
Break Force | 断开力。该项用于设置铰链关节断开的作用力。 |
Break Torque | 断开转矩。该项用于设置断开铰链节点所需的转矩。 |
有时游戏中会存在这样的情景:当希望要某些游戏对象暂时或永久性的粘在一起,这时就很适合使用固定关节组件。该组件不需要通过脚本来更改层级结构就可以实现想要的效果,只需要为那些要使用固定关节的游戏对象添加刚体组件即可。
可通过 Break Force 和 Break Torque 属性来设置关节的强度极限,如果这些参数不是无穷大而是一个数值,那么当施加到对象身上的力或转矩大于此极限值时,固定关节将被销毁,其对对象的约束也就随即失效。
Spring(弹簧关节组件)
弹簧关节组件可将两个刚体连接在一起,使其像连接着弹簧那样运动。
属性 | 说明 |
---|---|
Spring | 弹簧。该项用于设置弹簧的强度,数值越高弹簧的强度就越大。 |
Damper | 阻尼。该项用于设置弹簧的阻尼系数,阻尼系数越大,弹簧强度减小的幅度越大。 |
Min Distance | 最小距离。该项用于设置弹簧启用的最小距离值。如果两个对象之间的当前距离与初始距离的差大于该值,则不会开启弹簧。 |
Max Distance | 最大距离。该项用于设置弹簧启用的最大距离值。如果两个对象之间的当前距离与初始距离的差小于该值,则不会开启弹簧。 |
Break Force | 断开力。该项用于设置弹簧关节断开所需的转矩力。 |
弹簧关节允许一个带有刚体的游戏对象被拉向一个指定的目标位置,这个目标可以是另一个刚体对象或者世界。当游戏对象离目标位置越来越远时,弹簧关节会对其施加一个作用力使其回到目标的原点位置,类似橡皮筋或者弹弓的效果。
当弹簧关节被创建后(预览游戏模式下),其目标位置是由从锚点到连接的刚体(或世界)的相对位置所决定的,这使得在编辑器中将弹簧关节设定给角色或其他游戏对象非常容易,但是如果通过脚本来生成一个实时的推拉弹簧的行为就相对比较困难。如果想通过弹簧关节来控制游戏对象的位置,通常是建立一个带有刚体的空对象,然后将该空对象设置到 Connected Rigidbody 属性上,这样就可以通过脚本来控制空对象的移动,进而弹簧也会随着空对象的位移而移动了。
注意:不需要制定 Connected Body 属性来运转关节。在编辑器进入到游戏模式前,先对弹簧对象设置好理想的位置。弹簧关节所在的对象需要添加刚体组件。
Character Joint(角色关节组件)
角色关节主要用于表现布娃娃效果,它是扩展的球关节,可用于限制每一个轴向上的关节。
属性 | 说明 |
---|---|
Connect Body | 连接刚体。 |
Anchor | 锚点。 |
Axis | 扭动轴。该项用于设置角色关节的扭动轴,以橙色的圆锥gizmos表示。 |
Swing Axis | 摆动轴。该项用于设置角色关节的摆动轴,以绿色的圆锥gizmos表示。 |
Low Twist Limit | 扭曲下限。该项用于设置角色关节扭曲的下限。 |
• Limit | 该项用于设置角色关节扭曲的下限值。 |
• Bounciness | 该项用于设置角色关节扭曲下限的反弹值。 |
• Spring | 该项用于设置角色关节扭曲下限的弹簧强度。 |
• Damper | 该项用于设置角色关节扭曲下限的阻尼值。 |
High Twist Limit | 扭曲上限。 |
• Limit | 该项用于设置角色关节扭曲的上限值。 |
• Bounciness | 该项用于设置角色关节扭曲上限的反弹值。 |
• Spring | 该项用于设置角色关节扭曲上限的弹簧强度。 |
• Damper | 该项用于设置角色关节扭曲上限的阻尼值。 |
Swing 1Limit | 摆动限制1。 |
Swing 2Limit | 摆动限制2。 |
Break Force | 断开力。 |
Break Torque | 断开转矩。 |
Configurable Joint(可配置关节组件)
可配置关节组件支持用户自定义关节,它开放了 PhysX 引擎中所有与关节相关的属性,因此可像其他类型的关节那样来创造各种行为。可配置关节有两类主要的功能:移动/旋转限制和移动/旋转加速度。
属性 | 说明 |
---|---|
Connected Body | 连接刚体。 |
Anchor | 锚点。 |
Axis | 主轴。 |
Secondary Axis | 副轴。主轴和副轴共同决定了关节的局部坐标,第3个轴与这两个轴所构成的平面相垂直。 |
XMotion | X轴移动。该项用于设置游戏对象在X轴的移动形式:自由移动、锁定移动及限制性移动。 |
YMotion | Y轴移动。该项用于设置游戏对象在Y轴的移动形式:自由移动、锁定移动及限制性移动。 |
ZMotion | Z轴移动。该项用于设置游戏对象在Z轴的移动形式:自由移动、锁定移动及限制性移动。 |
Angular XMotion | X轴旋转。该项用于设置游戏对象在X轴的旋转形式:自由旋转、锁定旋转及限制性旋转。 |
Angular YMotion | Y轴旋转。该项用于设置游戏对象在Y轴的旋转形式:自由旋转、锁定旋转及限制性旋转。 |
Angular ZMotion | Z轴旋转。该项用于设置游戏对象在Z轴的旋转形式:自由旋转、锁定旋转及限制性旋转。 |
Linear Limit | 线性限制。该项用于设置自关节原点的距离为基准对其运动边界加以限定。 |
• Limit | 限制。该项用于设置从原点到边界的距离。 |
• Bounciness | 反弹。该项用于设置当前对象到边界时施加给它的反弹力。 |
• Spring | 弹簧。该项用于设置将对象拉回边界的力。 |
• Damper | 阻尼。该项用于设置弹簧的阻尼值。 |
Low Anglar XLimit | X轴旋转下限。以与关节初始旋转的差值为基础设定旋转约束下限的边界。 |
• Limit | 旋转的限制角度。该项用于设置对象旋转角度的下限值。 |
• Bounciness | 反弹。该项用于设置当前对象到边界时施加给它的反弹力。 |
• Spring | 弹簧。该项用于设置将对象拉回边界的力。 |
• Damper | 阻尼。该项用于设置弹簧的阻尼值。 |
Hight Anglar XLimit | X轴旋转下限。以与关节初始旋转的差值为基础设定旋转约束上限的边界。 |
• Limit | 旋转的限制角度。该项用于设置对象旋转角度的上限值。 |
• Bounciness | 反弹。该项用于设置当前对象到边界时施加给它的反弹力。 |
• Spring | 弹簧。该项用于设置将对象拉回边界的力。 |
• Damper | 阻尼。该项用于设置弹簧的阻尼值。 |
Anglar YLimit | Y轴旋转限制。以与关节初始旋转的差值为基础设定旋转约束。 |
• Limit | 旋转的限制角度。该项用于设置对象旋转角度的上限值。 |
• Bounciness | 反弹。该项用于设置当前对象到边界时施加给它的反弹力。 |
• Spring | 弹簧。该项用于设置将对象拉回边界的力。 |
• Damper | 阻尼。该项用于设置弹簧的阻尼值。 |
Anglar ZLimit | Z轴旋转限制。以与关节初始旋转的差值为基础设定旋转约束。 |
• Limit | 旋转的限制角度。该项用于设置对象旋转角度的上限值。 |
• Bounciness | 反弹。该项用于设置当前对象到边界时施加给它的反弹力。 |
• Spring | 弹簧。该项用于设置将对象拉回边界的力。 |
• Damper | 阻尼。该项用于设置弹簧的阻尼值。 |
Target Position | 目标位置。关节在X、Y、Z三个轴上应达到的目标位置。 |
Target Velocity | 目标速度。关节在X、Y、Z三个轴上应达到的目标速度。 |
XDrive | X轴驱动。设定了对象沿局部坐标系X轴的运动形式。 |
• Mode | 模式。可设定为目标位置、目标速度、目标位置及速度、不选择。 |
• Position Spring | 位置弹簧。朝预定义方向上的皮筋的拉力,只有当Mode包含Position时该项才有效。 |
• Position Damper | 位置阻尼。抵抗位置弹簧的力,只有当Mode包含Position时该项才有效。 |
• Maximum Force | 最大作用力。推动对象朝预定方向运动的作用力的总和,只有当Mode包含Velocity时才有效。 |
YDrive | Y轴驱动。设定了对象沿局部坐标系Y轴的运动形式。 |
• Mode | 模式。可设定为目标位置、目标速度、目标位置及速度、不选择。 |
• Position Spring | 位置弹簧。朝预定义方向上的皮筋的拉力,只有当Mode包含Position时该项才有效。 |
• Position Damper | 位置阻尼。抵抗位置弹簧的力,只有当Mode包含Position时该项才有效。 |
• Maximum Force | 最大作用力。推动对象朝预定方向运动的作用力的总和,只有当Mode包含Velocity时才有效。 |
ZDrive | Z轴驱动。设定了对象沿局部坐标系Z轴的运动形式。 |
• Mode | 模式。可设定为目标位置、目标速度、目标位置及速度、不选择。 |
• Position Spring | 位置弹簧。朝预定义方向上的皮筋的拉力,只有当Mode包含Position时该项才有效。 |
• Position Damper | 位置阻尼。抵抗位置弹簧的力,只有当Mode包含Position时该项才有效。 |
• Maximum Force | 最大作用力。推动对象朝预定方向运动的作用力的总和,只有当Mode包含Velocity时才有效。 |
Target Rotation | 目标旋转。目标旋转是一个四元数,它定义了关节应当旋转到的角度。 |
Target Angular Velocity | 目标旋转角速度。目标旋转角速度是一个三维向量,它定义了关节应当旋转到的角速度。 |
Rotation Drive Mode X&Y&Z | 旋转驱动模式。通过 X&Y&Z 轴驱动或插值驱动来控制对象自身的旋转。 |
Angular XDrive | X 轴角驱动。该项设定了关节如何围绕 X 轴进行旋转,只有当 Rotation Drive Mode 为 Swing & Twist 时此项才生效。 |
• Mode | 模式。可设定为目标位置、目标速度、目标位置及速度、不选择。 |
• Position Spring | 位置弹簧。朝预定义方向上的皮筋的拉力,只有当Mode包含Position时该项才有效。 |
• Position Damper | 位置阻尼。抵抗位置弹簧的力,只有当Mode包含Position时该项才有效。 |
• Maximum Force | 最大作用力。推动对象朝预定方向运动的作用力的总和,只有当Mode包含Velocity时才有效。 |
Angular YZDrive | YZ 轴角驱动。该项设定了关节如何围绕 Y 轴和 Z 轴进行旋转,只有当 Rotation Drive Mode 为 Swing & Twist 时此项才生效。 |
• Mode | 模式。可设定为目标位置、目标速度、目标位置及速度、不选择。 |
• Position Spring | 位置弹簧。朝预定义方向上的皮筋的拉力,只有当Mode包含Position时该项才有效。 |
• Position Damper | 位置阻尼。抵抗位置弹簧的力,只有当Mode包含Position时该项才有效。 |
• Maximum Force | 最大作用力。推动对象朝预定方向运动的作用力的总和,只有当Mode包含Velocity时才有效。 |
Slerp Drive | 插值驱动。该项设定了关节如何围绕局部所有的坐标轴进行旋转,只有当 Rotation Drive Mode 为 Slerp 时该项才生效。 |
• Mode | 模式。可设定为目标位置、目标速度、目标位置及速度、不选择。 |
• Position Spring | 位置弹簧力。朝预定义方向上的皮筋的拉力,只有当Mode包含Position时该项才有效。 |
• Position Damper | 位置阻尼。抵抗位置弹簧的力,只有当Mode包含Position时该项才有效。 |
• Maximum Force | 最大作用力。推动对象朝预定方向运动的作用力的总和,只有当Mode包含Velocity时才有效。 |
Projection Mode | 投影模式。该项用于设置当对象离开其限定的位置过远时,会让该对象回到其受限制的位置。可设定为位置和旋转、只有位置及不选择。 |
Projection Distance | 投影距离。该项用于设置当对象与其连接刚体的距离超过投影距离时,该对象会回到适当的位置。 |
Projection Angle | 投影角度。该项用于设置当对象与其连接刚体的角度超过投影角度时,该对象会回到适当的位置。 |
Configured In World Space | 在世界坐标系中配置。勾选该项,则所有与目标相关的数值都会在世界坐标系中来计算,而不在对象的局部坐标系中计算。 |
Swap Bodies | 勾选该项,则应用交换刚体功能。若开启此项,连接着的两个刚体会发生交换。 |
Break Force | 断开力。 |
Break Torque | 断开扭矩。 |
细节说明:
1、移动/旋转限制
可以为每个旋转轴和运动类型指定约束。针对 X 轴、Y 轴以及 Z 轴运动可定义沿不同轴的移动,而针对 X 轴、Y 轴和 Z 轴旋转可定义沿不同轴旋转,这些属性可以被设定为 Free(不受约束)、Limited(受自定义的限制)及 Locked(锁定状态无法运动)。
1)移动限制:如果游戏对象某个轴的 Motion 属性设定为 Limited,则可通过修改 Limited 属性值来设定该轴的运动约束值。对于平移运动,Linear Limited 属性将设定该对象能够远离原点的最大距离,通过该属性下的 Limited 数值可以对 Motion 属性值为 Limited 的任何移动进行约束。
2)旋转限制:旋转限制与移动限制相类似,只是 Angular Motion 属性是与 Angular Limit 相关。LinearLimit 属性设定了对 3 个轴在移动上的约束,而 AngularLimit 属性则设定了对于 3 个轴载旋转上的约束。
2、移动/旋转加速度
使对象到达指定的位置或方向运动,或到达指定的速度或角速度。此系统的工作方式是:首先定义一个想要到达的目标,然后通过驱动力来提供加速度以便使其到达此目标,每一个驱动都有一个模式,通过此模式可定义该对象当前的目标。
1)移动加速度 X 轴、Y 轴和 Z 轴的驱动属性使得游戏对象沿着特定的轴来移动,每个驱动模式指定了对象是朝着目标位置还是目标速度抑或是两者兼而有之的运动方式。比如当 X 轴驱动设置为 Position 时,对象会朝着 X 轴的目标位置去移动。
当驱动模式为 Position 时,它的位置弹簧值将决定其如何朝着目标位置运动:同样,当驱动模式为 Velocity 时,它的最大作用力将决定该对象如何被加速至目标速度。
2)旋转加速度:旋转加速度属性为 X 轴角、YZ 轴角驱动及插值驱动,其功能与移动驱动基本相同,只是插值驱动与角驱动在功能上表现不同。可以在旋转驱动模式中选择是采用角驱动还是插值驱动,但这两种驱动不能同时被使用。
Joint API
参见 Unity 常用 API
● 2.26 Joint