铰链关节用于模拟两个物体通过一个轴连接的情况,允许物体绕着这个轴自由旋转。这种关节常用于实现门铰链、车轮、钟摆等需要绕固定轴旋转的物理效果。
添加关节组件时,需要确保目标实体上已经挂载了一个 动态碰撞器组件
,如果你未添加,编辑器会自动为你添加一个动态碰撞器组件
。
如果连接的目标是碰撞体,则目标实体需要挂载碰撞体组件(动态碰撞器,静态碰撞器,角色控制器)。
anchor
在自身碰撞体上定义的锚点位置(局部坐标)。这个点是铰链的旋转中心。
connectedAnchor
定义连接点的位置:
automaticConnectedAnchor
是否自动计算连接点位置。启用时会自动保持物体的初始相对位置。
属性 | 描述 |
---|---|
min | 最小角度限制(度) |
max | 最大角度限制(度) |
contactDistance | 接触距离,定义限制器开始生效的距离 |
stiffness | 弹簧刚度(仅在 useSpring 为 true 时生效) |
damping | 阻尼系数(仅在 useSpring 为 true 时生效) |
属性 | 描述 |
---|---|
targetVelocity | 目标角速度(度/秒) |
forceLimit | 最大扭矩限制 |
freeSpin | 是否允许自由旋转 |
gearRatio | 齿轮比,用于调整实际输出的角速度 |
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;