根据这篇文章,可以统一解决快速移动物体的碰撞问题。
如果您有粒子系统使用对撞机和重力修改器发射 1 个球体粒子(例如投球)。还有另一个带有刚体的移动对撞机(例如棒球棒),当它们以“高速”碰撞时,是否有可能使这些物体不通过?您不能在粒子上设置“碰撞检测”。
为了更好地理解,我在下面添加了两个屏幕截图。
随时提出任何问题。
根据这篇文章,可以统一解决快速移动物体的碰撞问题。
如果您有粒子系统使用对撞机和重力修改器发射 1 个球体粒子(例如投球)。还有另一个带有刚体的移动对撞机(例如棒球棒),当它们以“高速”碰撞时,是否有可能使这些物体不通过?您不能在粒子上设置“碰撞检测”。
为了更好地理解,我在下面添加了两个屏幕截图。
随时提出任何问题。
问题是因为您的对象正在以它们通过对撞机的速度移动。假设您的对象每帧移动 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;
}
}
确保这个脚本在你的“棒球”上,并在这个脚本的某个地方添加力量。确保您没有使用粒子系统,而是使用刚体。
这是未经测试的;如果它不起作用或出现错误,请告诉我。