马达关节 MotorJoint
Author : Charley
关节的通用属性(编辑关节连线、绑定另一刚体、设置锚点、振动频率、阻尼、碰撞连接刚体)请查看 2D物理编辑总览 中关节通用功能章节。
马达关节允许指定两个刚体间的相对位置和角度,然后尝试通过施加力和扭矩来达到这些目标,并会尽力维持这样的配置。
一、线性偏移 linearOffset
线性偏移的作用在于试图将连接的另一刚体与自身刚体保持在某一个相对的位置上,而这个相对的位置正是基于自身刚体锚点的偏移位置。默认的偏移是0,表示与另一刚体的位置会与自身刚体重合,通过调整线性偏移值,我们可以使得其中一个刚体到达预期的目标位置,例如实现自动门的效果,如动图1所示:

(动图1)
如果需要设置线性偏移,并且关节中的一方是静态刚体的时候,建议将马达关节添加给静态刚体,这样最终另一刚体的锚点会直接与静态刚体的线性偏移点重合,看上去更加直观。否则动态刚体的线性偏移点会与静态刚体锚点主动重合,导致线性偏移点在运行的时候与编辑时候位置不一致(不影响结果,都可以实现出同样的运行效果)。
二、角度偏移 angularOffset
角度偏移定义了两个刚体之间期望保持的角度差,马达关节会尝试通过施加力和扭矩来使刚体旋转到目标角度,并尽可能地维持这个角度差。
角度偏移值以X轴正方向为起始,顺时针计算角度。该功能可以适用于关卡中的旋转门或板桥开合等效果的实现,效果如动图2所示:

(动图2)
这里有一个细节需要注意,当力作用于自身刚体时,正角度是顺时针方向。如果自身刚体是静态刚体,基于力的相互性,力作用于另一刚体时,另一刚体则会与自身刚体处于逆时针的角度。效果如动图3所示:

(动图3)
[!tip]
由于角度偏移涉及力与质量的计算。设置角度偏移的目标刚体,必须要添加碰撞形状,否则角度偏移无效果。
三、最大力 maxForce
最大力是指在马达关节中施加在刚体上的最大力的大小。设置最大力的目的是限制马达关节施加在刚体上的力的大小,以防止力过大导致刚体的运动不稳定或产生不受控制的行为。当马达关节施加的力超过最大力时,引擎会自动截断力的大小,使其不超过设定的最大值。
但是如果最大力设置的过小,也可能会导致受其它力的影响而无法实现预期的刚体运动效果。合理的最大力设置有助于保持马达关节约束能力的稳定性和可控性。
效果如动图4所示:

(动图4)
四、最大扭矩 maxTorque
马达关节的力指的是线性力(推或拉力),而扭矩是绕轴旋转的角力,用来旋转刚体。
与最大力类似,最大扭矩用于当马达关节施加的扭矩超过最大扭矩值时,引擎会自动截断扭矩的大小,以确保不超过设定的最大值。
扭矩的大小会影响旋转速度,过小的最大扭矩值,甚至会导致无法实现马达关节的角度偏移。因此,在实现角度偏移时,既需要足够的力保持刚体运动的稳定性,也需要足够的扭矩使得刚体能够旋转起来。
效果如动图5所示:

(动图5)
五、修正系数 correctionFactor
当马达关节连接的刚体发生了位置偏差时(不在指定的偏移位置上),修正系数影响用多快的速度来纠正这一偏差,使得物体回到预期的位置。
修正系数取值范围是0-1之间,该值影响着马达关节的偏移纠正速度,可以理解为是一个控制马达关节响应速度的参数。较大的修正系数会导致更快的达到偏移位置,但会引起振荡。较小的修正系数会导致更慢的达到偏移位置,但更稳定。
它允许开发者为关节设定一个响应灵敏度的平衡点,使得刚体能以期望的方式运动,同时又不会因过于剧烈的校正而造成的不稳定。
效果如动图6所示:

(动图6)