物理

铰链关节

铰链关节用于模拟两个物体通过一个轴连接的情况,允许物体绕着这个轴自由旋转。这种关节常用于实现门铰链、车轮、钟摆等需要绕固定轴旋转的物理效果。

使用方法

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

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

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

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

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

属性说明

碰撞体设置

  • connectedCollider
    指定要连接的目标碰撞体。当设置为 null 时,关节会连接到世界空间中的一个固定点。

锚点设置

  • anchor
    在自身碰撞体上定义的锚点位置(局部坐标)。这个点是铰链的旋转中心。

  • connectedAnchor
    定义连接点的位置:

    • 当 connectedCollider 为 null 时,表示世界空间中的固定点
    • 当 connectedCollider 不为 null 时,表示目标碰撞体局部空间中的连接点
  • automaticConnectedAnchor
    是否自动计算连接点位置。启用时会自动保持物体的初始相对位置。

旋转设置

  • axis
    定义铰链的旋转轴方向。物体将沿着这个轴进行旋转。

运动限制

  • useLimits
    是否启用角度限制。启用后可以限制铰链的转动范围。

  • limits
    设置铰链的转动范围:

属性描述
min最小角度限制(度)
max最大角度限制(度)
contactDistance接触距离,定义限制器开始生效的距离
stiffness弹簧刚度(仅在 useSpring 为 true 时生效)
damping阻尼系数(仅在 useSpring 为 true 时生效)

马达驱动

  • useMotor
    是否启用马达功能。启用后可以主动驱动铰链转动。

  • motor
    马达的参数设置:

属性描述
targetVelocity目标角速度(度/秒)
forceLimit最大扭矩限制
freeSpin是否允许自由旋转
gearRatio齿轮比,用于调整实际输出的角速度

弹性设置

  • useSpring
    是否启用弹簧效果。启用后,限制器会表现出弹性特征。

断裂阈值

  • breakForce
    关节能承受的最大力。超过此值时关节会断裂。

  • breakTorque
    关节能承受的最大扭矩。超过此值时关节会断裂。

质量计算干预

脚本使用

基础使用

// 添加铰链关节组件
const hingeJoint = entity.addComponent(HingeJoint);
 
// 设置连接对象
hingeJoint.connectedCollider = targetEntity.getComponent(Collider);
 
// 设置旋转轴
hingeJoint.axis.setValue(0, 1, 0); // Y轴旋转

运动限制

// 启用角度限制
hingeJoint.useLimits = true;
hingeJoint.limits = new JointLimits();
hingeJoint.limits.min = -45;         // 最小角度
hingeJoint.limits.max = 45;          // 最大角度
hingeJoint.limits.contactDistance = 5; // 接触距离
 
// 启用弹性限制
hingeJoint.useSpring = true;
hingeJoint.limits.stiffness = 100;  // 弹簧刚度
hingeJoint.limits.damping = 0.2;    // 阻尼系数

马达驱动

// 启用马达
hingeJoint.useMotor = true;
hingeJoint.motor = new JointMotor();
hingeJoint.motor.targetVelocity = 180;  // 目标角速度(度/秒)
hingeJoint.motor.forceLimit = 500;      // 最大扭矩
hingeJoint.motor.freeSpin = false;      // 自由旋转
hingeJoint.motor.gearRatio = 1;         // 齿轮比

获取运动信息

// 获取当前角度
const currentAngle = hingeJoint.angle;
 
// 获取当前角速度
const angularVelocity = hingeJoint.velocity;

这篇文档对您有帮助吗?