首页 > 解决方案 > 为什么子弹每次碰到墙壁时弹跳的速度都不一样?

问题描述

我正在 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;
}

我在碰撞器上放置了一个 2D 物理材料,它具有 1.15 的摩擦力和 0.1 的弹力,以使球弹跳(因为没有材料之前它不会弹跳)但是现在每次射击时球都会以不同的速度从墙上弹回. 有时子弹的速度是如此之快,以至于它穿过墙壁,这根本不是故意的。相反,我希望球以相同的速度从一堵墙反弹到另一堵墙,但我不知道如何解决这个问题。有人能帮我吗?

标签: c#unity3dgame-development2d-games

解决方案


你不需要代码的这个 onCollision 部分来让它反弹,这就是拥有刚体、对撞机和材质的关键。unity为你计算。

使子弹动态体,如果它移动得太快而无法检测到碰撞变化 刚体中的碰撞检测“(在墙上,但也可能在子弹上)从离散到连续。它应该反弹。如果角度和速度始终相同,结果也将始终是一样。我怀疑你有奇怪的结果,因为你压倒了实际的结肠。


推荐阅读