You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何固定动态刚体的质心并使其自由旋转?

实现动态刚体质心静止但可自由旋转的方案

方法1:直接帧更新约束位置(最直观)

  • 核心思路:每一帧物理更新后,强制把刚体质心拉回固定点,同时保留当前旋转角度。
  • Unity示例代码:
public Transform fixedPivot; // 绑定墙上的固定点
private Rigidbody _rb;

void Start() {
    _rb = GetComponent<Rigidbody>();
    _rb.centerOfMass = Vector3.zero; // 确保质心和物体本地原点对齐,方便定位
}

void FixedUpdate() {
    // 固定质心位置,保留旋转状态
    _rb.MovePosition(fixedPivot.position);
    // 可选:消除位置方向的速度,避免物理抖动
    _rb.velocity = Vector3.zero;
}
  • 注意:一定要用FixedUpdate处理物理相关操作,保证和物理引擎帧同步。

方法2:锁定平移自由度(物理引擎层面约束)

  • 直接关闭刚体的位置移动权限,只保留旋转权限,适合不需要动态调整固定点的场景。
  • Box2D示例代码:
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position = b2Vec2(10.0f, 5.0f); // 初始位置设为固定点
b2Body* rigidBody = world->CreateBody(&bodyDef);

// 锁定所有平移轴,允许自由旋转
rigidBody->SetLinearVelocity(b2Vec2(0, 0));
// 在物理步更新后强制重置位置,防止引擎计算偏差
void AfterPhysicsStep() {
    rigidBody->SetTransform(b2Vec2(10.0f, 5.0f), rigidBody->GetAngle());
}

方法3:用对关节类型(纠正之前的误用)

  • 你之前觉得关节不合适大概率是选了错误的关节类型,**枢轴关节(Revolute Joint)**完全匹配你的需求:
    • 一端固定在世界空间的固定点,另一端连接刚体质心
    • 仅限制位置移动,不限制旋转角度
  • Unreal Engine设置步骤:
    1. 给刚体添加Physics Constraint组件
    2. 约束目标选择场景中的静态固定点(或直接绑定到世界)
    3. 在约束面板中,勾选锁定X/Y/Z轴的平移选项,同时解锁所有旋转轴

内容的提问来源于stack exchange,提问作者Alex Porubaimikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:01:02