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

Unity技术问题:如何使Plate的Rigidbody随Table移动不偏移至桌外?

问题:推动桌子时盘子无法保持在桌面上方

场景与操作说明

  • 场景设定:小狗推动桌子远离熟睡的人,以此偷取桌上的甜甜圈
  • 已完成操作:为Table、Plate和Donut对象都添加了Rigidbody组件
    • 场景截图:小狗推桌子偷甜甜圈场景
    • Table的Rigidbody设置:Table的Rigidbody配置
    • Plate的Rigidbody设置:Plate的Rigidbody配置
    • Donut的Rigidbody设置:Donut的Rigidbody配置

遇到的问题

推动桌子时,桌面上方的Plate会快速滑到桌子边缘,无法保持在桌面上方。尝试过冻结Plate的位置、将其设置为Kinematic模式,但都没有效果。想确认这是配置问题,还是需要通过代码实现解决?


解决方案

配置层面的解决方法

1. 使用固定关节(Fixed Joint)

给Plate添加Fixed Joint组件,将Connected Body属性设置为Table的Rigidbody。这样盘子会和桌子保持相对固定的位置,同时甜甜圈仍能在盘子上正常进行物理交互。如果需要后期盘子能被小狗碰掉,可以调整关节的Break Force和Break Torque数值,让关节在受到一定力度时断开。

2. 调整物理参数

  • 增大Plate的Mass(质量),降低它被桌子移动带偏的概率;同时给Table和Plate的Rigidbody增加Drag(阻力)和Angular Drag(角阻力),减小移动时的惯性。
  • 将Table和Plate的Collision Detection都设置为Continuous Dynamic,避免高速移动时出现错位或穿模问题。

3. 设置父子关系(无独立物理需求时)

如果盘子不需要独立的物理碰撞效果(比如不会被其他物体碰撞移位),直接把Plate设为Table的子物体,同时移除Plate的Rigidbody组件。这样盘子会完全跟随桌子移动,不会出现错位。

代码层面的灵活控制方案

如果需要盘子有轻微晃动但不会滑走,可以使用以下脚本实现:

using UnityEngine;

public class KeepPlateOnTable : MonoBehaviour
{
    public Transform table;
    public Vector3 relativePosition; // 盘子相对于桌子的固定偏移位置

    void FixedUpdate()
    {
        // 让盘子跟随桌子位置,保留自身旋转(如需固定旋转可取消下方注释)
        transform.position = table.position + relativePosition;
        // transform.rotation = table.rotation;
    }
}

将脚本挂载到Plate上,指定table为桌子的Transform组件,设置好relativePosition(比如桌子中心上方的坐标)即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:13:39