一旦我看到一个Google Play游戏,
好的物理。我是Rigidbody2D
动作和物理学的新手。我能怎么做
同样的物理学?现在我的子弹爆炸了,不助推坦克。当我添加Rigidbody2D
时,子弹推了我的坦克
一点点,但仅此而已,我的坦克就停了。
我只有默认的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
参数中输入数字吗?现在,我正在使用这些参数:
希望您的理解和耐心。谢谢!
答案 0 :(得分:1)
更低的质量和线性阻力。实例化项目符号时,还要添加“力”。力方向应为负射击方向。
如果要在撞击时推动坦克,方向将为Vector3 dir = tank.position - impact.position
。然而,矢量在更大的距离上更长,但是我们想要相反的方向(爆炸越近,作用力越大)。因此,我们可以使用float force = 1f / dir.magnitude
然后像这样应用它
rb.addForce(dir.normalized * force);
通常有Rigidbody.AddExplosionForce,但不适用于2D。