Unity-可配置关节
可配置关节 (Configurable Joint) 包含其他关节类型的所有功能,并提供更强大的角色移动控制。当您想要自定义布娃娃的运动并对角色强制实施某些姿势时,这种关节特别有用。使用可配置关节还可以将关节修改为您自行设计的高度专业化关节。
属性




详细信息
与其他关节一样,使用可配置关节可以限制对象的移动,而且通过可配置关节还可以使用作用力将对象驱动到目标速度或位置。由于有许多配置选项,可能需要尝试不同的选项,才能使关节完全按照所需的方式运行。
约束运动
可使用 X, Y, Z Motion 和 X, Y, Z Rotation 属性独立约束每个关节轴上的平移运动和旋转。启用 Configured In World Space 可以将运动约束到世界轴而不是对象的局部轴。所有这些属性都可以设置为 Locked、Limited 或 _Free_:
Locked 轴会限制所有运动,因此关节根本无法移动。例如,世界 y 轴中锁定的对象无法上下移动。
Limited 轴允许在预定义的限制范围内自由移动,如下所述。例如,通过将炮塔的 Y 旋转限制到特定角度范围,可以给炮塔设置受限制的火弧。
Free 轴允许任意移动。
可使用 Linear Limit 属性限制平移运动,该属性定义了关节可从其原点移动的最大距离(分别沿每个轴进行测量)。例如,为了能够约束空气曲棍球台的曲棍球,可让关节在 y 轴为锁定状态(在世界空间中),在 z 轴为自由状态,并在 x 轴为受限状态以便适应球台的宽度限制;这样,曲棍球会被限制在游戏区域内。

还可以使用 Angular Limit 属性来限制旋转。与线性限制不同,此属性可用于为每个轴指定不同的限制值。还可以为 x 轴的旋转角度定义单独的上限和下限;其他两个轴在原始旋转的两侧使用相同的角度。例如,可使用平面构造一个“摇摆平台”,将关节约束为允许在 X 和 Z 方向轻微摇摆,同时锁定 Y 旋转。
弹性和弹簧
默认情况下,关节在达到限制时会停止移动。然而,像这样的非弹性碰撞在现实世界中是罕见的,因此向受约束的关节添加一些弹跳感会很有用。为了使受约束的对象在达到限制后反弹,可使用线性和角度限制的 Bounciness 属性。大部分的碰撞在有了少量弹性之后会显得更自然,但也可以将该属性设置为更高的值,从而模拟弹性异常大的边界,比如台球桌垫。

为了进一步软化关节限制,可使用弹簧属性:用于平移的 Linear Limit Spring 和用于旋转的 Angular X/YZ Limit Spring。如果将 Spring 属性设置为大于零的值,关节达到限制时不会突然停止移动,而是会通过弹簧力被拉回到限制位置。这个力的强度由 Spring 值确定。默认情况下,弹簧具有完美的弹性,并会按照与碰撞相反的方向弹回关节。
可使用 Damper 属性来减少弹性并以更温和的方式将关节恢复到限制位置。例如,可使用弹簧关节创建一个可向左或向右拉动的杠杆,然后弹回到直立位置。如果弹簧具有完美弹性,则杠杆在释放后将围绕中心点来回摆动。但是,如果添加足够的阻尼,弹簧将迅速稳定到中立位置。

驱动力
关节不仅可以对附加到的对象做出反应,而且还可以主动施加_驱动力_使对象运动。一些关节需要保持对象以恒定速度移动,例如转动风扇叶片的旋转电机。使用 Target Velocity 和 Target Angular Velocity 属性可为此类关节设置所需的速度。
可能需要使用关节来将关节的对象移向空间中的特定位置或移向特定方向。使用 Target Position 和 Target Rotation 属性可以设置此功能。例如,要实现叉车,可将叉车的叉子安装在可配置关节上,然后使用脚本设置目标高度以升高叉子。
设置了目标后,_X, Y, Z Drive_ 和 Angular X/YZ Drive_(或者是 Slerp Drive_)属性可以指定用于将关节推向目标的作用力。驱动的 Mode 属性选择关节是否应该寻找目标位置和/或速度。在寻找目标位置时,_Position Spring_ 和 Position Damper 的工作方式与关节限制相同。在速度模式下,弹簧力取决于当前速度和目标速度之间的“差距”;阻尼器有助于速度稳定在所选值,而不是在该值周围无限振荡。例如,_XDrive_ 力的公式为:
因此,力会根据当前值与目标值之间的差值成比例增大,并根据当前速度和目标速度之间的差值成比例减小阻尼。Unity 会将力施加到位置驱动和旋转驱动。
Maximum Force 属性用于最终微调,无论关节距其目标有多远,均可防止弹簧施加的力超过限制值。这样可以防止远离目标的关节快速以不受控制的方式将对象拉回。
在使用任何驱动力(下面描述的 Slerp Drive 除外),关节都会在每个轴上单独将力施加到对象。举例来说,可实现一个航天器,使之具有较高的向前飞行速度,但在侧向转向运动中具有相对较低的速度。
Slerp Drive
不同于其他驱动模式在不同的轴上施加力,_Slerp Drive_ 使用四元数的球面插值或“Slerp”功能来重新定向关节。Slerp 过程不会隔离单个轴,而是寻找将对象从当前方向带到目标的最小总旋转,并根据需要将该旋转应用于所有轴。Slerp Drive 的配置比较简单,但不允许为 X 和 Y/Z 轴指定不同的驱动力。
要启用 Slerp Drive,请将 Rotation Drive Mode 属性从 X and YZ 更改为 Slerp。关节可以使用 Angular X/YZ Drive 值或 Slerp Drive 值,但不能同时使用两者。