在Unity中彼此进入的刚体

时间:2017-12-17 03:29:07

标签: c# unity3d unity5 rigid-bodies

如何解决这个问题?

enter image description here

详细信息:从游戏视图中可以看出,宝石正从屏幕的右上角掉落。当它们快速摔倒并以相似的旋转方式相互撞击时,它们相互进入。

2 个答案:

答案 0 :(得分:2)

那个宝石看起来对我来说太糟糕了。如果碰撞很快,它们也可以通过物体。

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

我建议您编写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变量来调用最后一帧...即没有刚体的对象。

答案 1 :(得分:1)

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

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;
    }
}