弹跳全部在一段时间后获得幅度和速度 0 并停止

Bouncing all gets magnitude and velocity 0 after a while and stops

我试图简单地让一个球以恒定的速度弹跳并且没有任何无限弹跳。为了避免无限弹跳,我在碰撞事件中的每次弹跳都添加了一些漂移,如下所示:

private void OnCollisionEnter2D(Collision2D collision)
{
    Vector2 veclocityTweak = new Vector2(Random.Range(0f, 0.2f), Random.Range(0f, 0.2f));
    rigigidBody2D.velocity += veclocityTweak;
}

我还旋转了对撞机(球在这个盒子里弹跳)

这没问题。不完美。但我真正的问题是球突然停止并且 rigidBody2D.velocity 设置为 (0.0, 0.0) 以及幅度。

我试图通过检查速度的更新函数中的这个函数 运行 来防止这种情况。这个想法是它应该防止球的速度变为 0,但一段时间后仍然会发生这种情况:

private void checkVelocity()
{
     Vector2 vel = rigigidBody2D.velocity;

     float minSpeed = 0.8f;
     if (vel.magnitude < minSpeed)
     {
         float multipl = Random.Range(-1.0f, 1.0f);
         rigigidBody2D.velocity = vel.normalized * multipl;
     }
}

这是我在项目设置中的设置:

我已经将球的 material 设置为:

如何防止球停止?

我建议这样做:

float minVelocity = 10;
float maxTurn = 10;

void OnCollisionEnter2D (Collision2D collision)
{
    Quaternion randomRotation = Quaternion.Euler(0, 0, Random.Range(-maxTurn, maxTurn));
    rb.velocity = randomRotation * (rb.velocity.normalized * minVelocity);
}

此代码会将球的速度设置为其先前的速度,但幅度为 minVelocity。它还会将该矢量旋转一个随机度数,使其在不同方向弹跳。