首页 > 解决方案 > 弹跳一段时间后所有的幅度和速度都为 0 并停止

问题描述

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

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;
     }
}

这是我在项目设置中的设置: 在此处输入图像描述

我已将球的材料设置为: 在此处输入图像描述

我怎样才能防止球停止?

标签: c#unity3dphysicsbounce

解决方案


我建议这样做:

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. 它还会将该向量旋转随机度数,以使其在不同方向反弹。


推荐阅读