为什么子弹每次碰到墙都会以不同的速度弹跳?
Why is the bullet ricocheting at different speeds every time it touches a wall?
我正在用 Unity 2D 制作游戏,我希望玩家从枪中射出的子弹在撞到墙上后能反弹。我为子弹制作的脚本是这样的:
public float speed = 40f;
public Rigidbody2D rb;
private Vector2 direction;
public void Start()
{
rb.velocity = transform.right * speed;
}
private void OnCollisionEnter2D(Collision2D collision)
{
Vector2 inNormal = collision.contacts[0].normal;
direction = Vector2.Reflect(rb.velocity, inNormal);
rb.velocity = direction * speed;
}
我在具有 1.15 摩擦力和 0.1 弹跳力的碰撞器上放置了 2D 物理 material 以使球弹跳(因为之前没有 material 它不会弹跳)但现在球每次我射击它时,它都会以不同的速度从墙上弹开。有时子弹的速度太高以至于它会穿过墙壁,而这根本不是故意的。相反,我希望球以相同的速度从一堵墙反弹到另一堵墙,但我不知道如何解决这个问题。有人可以帮助我吗?
你不需要代码的这个 onCollision 部分来让它反弹,这就是拥有刚体、碰撞器和 material 的意义所在。 unity 帮你计算。
制作子弹动态体,如果它移动得太快而无法检测到刚体(在墙上但也可能在子弹上)中的碰撞变化“碰撞检测”从离散到连续。
它应该反弹。
如果角度和速度始终相同,结果也将始终相同。
我怀疑你的结果很奇怪,因为你正在超越实际的碰撞。
我正在用 Unity 2D 制作游戏,我希望玩家从枪中射出的子弹在撞到墙上后能反弹。我为子弹制作的脚本是这样的:
public float speed = 40f;
public Rigidbody2D rb;
private Vector2 direction;
public void Start()
{
rb.velocity = transform.right * speed;
}
private void OnCollisionEnter2D(Collision2D collision)
{
Vector2 inNormal = collision.contacts[0].normal;
direction = Vector2.Reflect(rb.velocity, inNormal);
rb.velocity = direction * speed;
}
我在具有 1.15 摩擦力和 0.1 弹跳力的碰撞器上放置了 2D 物理 material 以使球弹跳(因为之前没有 material 它不会弹跳)但现在球每次我射击它时,它都会以不同的速度从墙上弹开。有时子弹的速度太高以至于它会穿过墙壁,而这根本不是故意的。相反,我希望球以相同的速度从一堵墙反弹到另一堵墙,但我不知道如何解决这个问题。有人可以帮助我吗?
你不需要代码的这个 onCollision 部分来让它反弹,这就是拥有刚体、碰撞器和 material 的意义所在。 unity 帮你计算。
制作子弹动态体,如果它移动得太快而无法检测到刚体(在墙上但也可能在子弹上)中的碰撞变化“碰撞检测”从离散到连续。 它应该反弹。 如果角度和速度始终相同,结果也将始终相同。 我怀疑你的结果很奇怪,因为你正在超越实际的碰撞。