一个约束是一条关节“规则”,关节将尝试确保不会永久打破此规则。Unity 中有不同类型的约束,所有关节都提供至少一个约束,这些约束适用于并控制 2D 刚体行为。有些约束会限制行为,例如确保刚体保持在一条线上或在特定位置中。有些是“驱动”约束,可主动强制刚体游戏对象以特定方式行事,例如尝试使游戏对象保持特定速度。
Unity 的物理系统会期望暂时打破约束,例如当对象移动的距离超过设定的约束距离,或者其移动速度超过设定的约束速度时。未打破约束时,关节不施加任何作用力。只有打破约束时,关节才施加作用力来修复约束。
例如,对于“驱动”约束,关节施加力来保持距离或确保约束所设置的速度。虽然这种施力通常是快速执行的,但并不总是立即修复约束,而是随着时间的推移逐渐修复约束。这可能导致关节看起来在拉伸或看起来不那么刚硬。发生延迟是因为物理系统试图施加关节作用力来修复约束,而同时其他物理作用力正在发挥作用来打破这些约束。除了作用于游戏对象的冲突力之外,一些关节比其他关节更稳定并且反应更快。
无论关节提供什么约束,关节仅使用作用力来修复约束。这些力为线性(直线)力或角力(扭力)。
注意:考虑到作用在关节上的冲突力,建议在对已附加关节的刚体对象施加大作用力时始终要谨慎,特别是那些质量大的对象。
所有关节都能够监控它们施加的力或扭矩,从而让其保持在自身约束范围内。一些关节同时监控力和扭矩,而其他关节仅监控力。此功能会告知关节在尝试保持其约束时超过特定力或扭矩的时间,而这些阈值可指定为 Joint2D.breakForce 和 Joint2D.breakTorque。当关节超过这些阈值时,称为关节断裂。
可以指定关节与 Joint2D.breakAction 断裂时要执行的操作。默认断裂操作是销毁 Joint2D 组件,您可以参考其他可用固定操作的 JointBreakAction2D。