约束是一组规则,关节试图确保不会永久断裂。有不同的约束类型,所有关节至少都提供一个适用于并控制 2D 物理行为的约束。某些约束限制行为,例如确保 Rigidbody 保持在线上或特定位置。有些是“驱动”约束,它们会积极地强制 Rigidbody 以某种方式行为,例如尝试使 GameObject 保持一定速度。
Unity 的物理系统期望约束可以被暂时打破,例如当对象移动的距离大于其设定的距离约束或移动速度超过其设定的速度约束时。当约束没有被打破时,关节不会应用任何力。当约束被打破时,关节会应用力来修复约束。
例如,对于“驱动”约束,关节会应用力来维持约束设定的距离或确保速度。虽然这种力的应用通常是迅速进行的,但它并不总是立即修复约束,而是逐渐随时间修复。这可能导致关节看起来被拉伸或变得不够刚性。延迟发生是因为物理系统试图应用关节力来修复约束,而其他物理力同时仍在作用于打破这些相同的约束。除了作用在 GameObject 上的冲突力外,某些关节比其他关节更稳定,反应更快。
无论关节提供什么约束,关节仅使用力来修复约束。这些力是线性(直线)力或角(扭矩)力。
提示:由于作用于关节的冲突力,建议谨慎地将大力量应用于连接关节的 Rigidbody 对象,尤其是质量大的对象。
所有关节都能监控它们施加的力或扭矩,以保持在约束范围内。有些关节同时监控力和扭矩,而有些关节只监控力。这让你知道关节在尝试保持其约束时超过了特定的力或扭矩,你可以在 Joint2D.breakForce
和 Joint2D.breakTorque
中指定这些阈值。当关节超过这些阈值时,这被称为关节断裂。
你可以使用 Joint2D.breakAction
指定关节断裂时要采取的操作。默认的断裂操作是销毁 Joint2D 组件,你可以参考 JointBreakAction2D
了解其他可用的固定操作。