0

根据这篇文章,可以统一解决快速移动物体的碰撞问题。

如果您有粒子系统使用对撞机和重力修改器发射 1 个球体粒子(例如投球)。还有另一个带有刚体的移动对撞机(例如棒球棒),当它们以“高速”碰撞时,是否有可能使这些物体不通过?您不能在粒子上设置“碰撞检测”。

为了更好地理解,我在下面添加了两个屏幕截图。

随时提出任何问题。

对撞机(墙)不动,粒子会反弹

对撞机(墙)以“摆动”的速度向球移动,粒子穿过

4

1 回答 1

0

问题是因为您的对象正在以它们通过对撞机的速度移动。假设您的对象每帧移动 10 个单位,并且距离对撞机 1 个单位。如果对撞机有 5 个单位长,它不会停止移动的物体。这是因为下一次更新会将它推到下一个对象之前太多。

首先,不要为此使用粒子系统。只需使用刚体,因为在这些情况下更容易处理。

您可以通过进行扫描测试来解决此问题。扫描测试检查对象要去的对撞机。你可以在它击中的地方阻止它移动。

Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}
void Update()
{
    Sweep();
}
void Sweep()
{
    RaycastHit hit;
    if (Physics.SweepTest(rb.velocity, out hit, rb.velocity.magnitude))
    {
        rb.velocity = rb.velocity.normalized * hit.distance;
    }
}

确保这个脚本在你的“棒球”上,并在这个脚本的某个地方添加力量。确保您没有使用粒子系统,而是使用刚体。

这是未经测试的;如果它不起作用或出现错误,请告诉我。

于 2021-06-17T17:08:00.567 回答