我怎样才能实现相同的物理学?

时间:2019-07-18 05:55:25

标签: c# unity3d

一旦我看到一个Google Play游戏, 好的物理。我是Rigidbody2D动作和物理学的新手。我能怎么做 同样的物理学?现在我的子弹爆炸了,不助推坦克。当我添加Rigidbody2D时,子弹推了我的坦克 一点点,但仅此而已,我的坦克就停了。

gif

我只有默认的Rigidbody2D移动脚本。

    void FixedUpdate()
    {
            if (moveup1) // bool button for touch controls
            { 
                direction = Mathf.Sign(Vector2.Dot(rb.velocity, rb.GetRelativeVector(Vector2.right)));
                rb.AddRelativeForce(-Vector2.left * upspeed * 300); // these vectors looks weird but all work perfectly
            }

            if (movedown1) // bool button
            {
                direction = Mathf.Sign(Vector2.Dot(rb.velocity, rb.GetRelativeVector(Vector2.right)));
                rb.AddRelativeForce(Vector2.left * downspeed * 300);
            }

            if (rotateleft1) // bool button
            {
                steeringAmount = -1;
                rb.rotation += steeringAmount * steeringPower;
                rb.AddRelativeForce(-Vector2.right * rb.velocity.magnitude * steeringAmount / 2);
            }
            if (rotateright1) // bool button
            {
                steeringAmount = 1;
                rb.rotation += steeringAmount * steeringPower;
                rb.AddRelativeForce(-Vector2.right * rb.velocity.magnitude * steeringAmount / 2); 
            }
    }

也 我应该在Rigidbody2D参数中输入数字吗?现在,我正在使用这些参数:

rbparams scriptparams

希望您的理解和耐心。谢谢!

1 个答案:

答案 0 :(得分:1)

更低的质量和线性阻力。实例化项目符号时,还要添加“力”。力方向应为负射击方向。

如果要在撞击时推动坦克,方向将为Vector3 dir = tank.position - impact.position。然而,矢量在更大的距离上更长,但是我们想要相反的方向(爆炸越近,作用力越大)。因此,我们可以使用float force = 1f / dir.magnitude然后像这样应用它

rb.addForce(dir.normalized * force);

通常有Rigidbody.AddExplosionForce,但不适用于2D。