物理

弹性关节

弹性关节用于维持两个物体之间的距离约束,通过弹簧力和阻尼来控制物体间的相对运动。它可以设置最小和最大距离范围,并在物体超出范围时施加弹性约束力。

使用方法

  1. 选中目标实体,并在检查器中点击添加组件按钮,添加 SpringJoint 组件。

添加关节组件时,需要确保目标实体上已经挂载了一个 动态碰撞器组件,如果你未添加,编辑器会自动为你添加一个动态碰撞器组件

  1. 通过组件属性 connectedCollider 设置连接的目标碰撞体(若不需要,可保持为 null,即连接到世界空间中的一点)。

如果连接的目标是碰撞体,则目标实体需要挂载碰撞体组件(动态碰撞器,静态碰撞器,角色控制器)。

  1. 根据需要设置关节的属性调整关节的表现,各属性的含义和作用请参考下文。

属性说明

碰撞体设置

  • connectedCollider
    指定要连接的目标碰撞体。当设置为 null 时,关节会连接到世界空间中的一个固定点。这允许你将物体固定在空间中的特定位置。

锚点设置

  • anchor
    在自身碰撞体上定义的锚点位置,使用局部坐标。这个点定义了关节的连接位置。

  • connectedAnchor
    定义连接点的位置。其含义取决于 connectedCollider 的设置:

    • 当 connectedCollider 为 null 时,表示世界空间中的绝对位置
    • 当 connectedCollider 不为 null 时,表示目标碰撞体局部空间中的相对位置
  • automaticConnectedAnchor
    是否自动计算 connectedAnchor 的值。启用时,系统会自动设置连接点以确保物体间的初始位置关系。如需手动精确控制连接点,可将此属性设为 false。

距离约束

  • minDistance
    允许的最小距离。当物体间距离小于此值时,关节会施加推开力。

  • maxDistance
    允许的最大距离。当物体间距离大于此值时,关节会施加拉近力。

  • tolerance
    容差范围值,默认为 0.25。这个值决定了关节开始产生约束力的时机:

    • 当物体实际距离超出允许范围的 tolerance 值时,关节才会开始施加约束力
    • 例如:如果 maxDistance = 10,tolerance = 0.25,则只有当距离超过 10.25 时才会开始施加拉近力
    • 较大的容差值可以让关节的约束表现更柔和,较小的值则会使约束更严格

弹簧特性

  • stiffness
    弹簧刚度系数。较高的值会产生更强的回复力,使弹簧表现更"硬"。

  • damping
    阻尼系数。用于抑制弹簧振动,较高的值会使运动更快停止。

断裂阈值

  • breakForce
    关节能承受的最大力,超过此值时关节会断裂。设置为 Infinity 表示关节永远不会因受力而断裂。该属性可用于模拟物体间的可破坏连接。

  • breakTorque
    关节能承受的最大扭矩,超过此值时关节会断裂。设置为 Infinity 表示关节永远不会因扭转而断裂。与 breakForce 配合使用可以更真实地模拟连接的破坏过程。

质量计算干预

  • connectedMassScalemassScale
    分别用于调整连接碰撞体和自身碰撞体的质量影响。这些缩放值会影响关节约束的计算,允许你微调关节的物理行为。默认值为 1.0,增大数值会增加对应碰撞体在约束求解中的"重要性"。

脚本使用

基础使用

// 添加弹性关节组件
const springJoint = entity.addComponent(SpringJoint);
 
// 设置连接对象
springJoint.connectedCollider = targetEntity.getComponent(Collider);
 
// 设置距离范围
springJoint.minDistance = 1;
springJoint.maxDistance = 5;

弹性设置

// 配置弹簧属性
springJoint.stiffness = 50; // 弹簧刚度
springJoint.damping = 0.2;  // 阻尼系数
 
// 设置容差
springJoint.tolerance = 0.25;

这篇文档对您有帮助吗?