刚体在 Unity 中相互进入

Rigidbodies going inside each other in Unity

如何解决这个问题?

详情:正如您在游戏视图中所见,宝石从屏幕右上方掉落。当他们快速落下并以相似的旋转撞击对方时,他们就会进入对方。

gem 我觉得还不错。如果碰撞速度非常快,碰撞也可以穿过物体。

插值和连续网格检测都提高了物理性能。

我建议您编写 3 行代码,在对象快速运行时提高物理性能,在缓慢运行时将其切换为正常。您可以每帧进行接近测试以检查快速物体(物理速度变量)以了解它们接近的物体,并使快速和接近的物体的物理最大值。

我会像你写的那样使用,使用刚体速度是完美的,除了:

 private void Update ()
 {
     var vel = rgd.velocity;
     speed = vel.sqrMagnitude;//uses 5-20 times less processor power

     if (speed >= 4) // it's the same

Magnitude 使用平方根数学运算,这是处理器上最昂贵的运算之一。对每个帧的平方根和除法的实例持鹰派态度是所有高级程序员为简化代码所做的工作。

如果你必须找到不使用物理的物体的速度,那么你必须从每一帧的最后一帧位置删除它们的当前位置,以找到它们的速度向量,这将与rigidbody.velocity 使用 posA posB 变量来调用最后一帧...即对于没有刚体的对象。

这是我写的代码,我用在我的对象上。

bool fast;
Rigidbody rgd;
float speed;

private void Start ()
{
    rgd = gameObject.GetComponent<Rigidbody>();
}

private void Update ()
{
    var vel = rgd.velocity;
    speed = vel.magnitude;

    if (speed >= 2)
    {
        rgd.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;
    }
    else
    {
        rgd.collisionDetectionMode = CollisionDetectionMode.Discrete;
    }
}