在Unity 2D中设置最大水平移动速度而不设置最大速度

时间:2019-04-03 16:56:42

标签: unity3d physics

我一直在互联网上寻找帮助,以将角色的速度设置为最大-基本上,将角色的水平速度设置为上限。到目前为止,我发现的最好的东西是:

rb.velocity = new Vector2(Mathf.Clamp(rb.velocity.x, -maxSpeed, maxSpeed), rb.velocity.y);

但是,主要问题是,这会阻止角色的实际速度超过设置为maxSpeed的任何值(假设为4),这意味着,例如,如果它被移动的物体击中,它将推动它这样它的水平速度将超过4,每当完成运动计算后,它就会重置为4。我要寻找的是可以阻止角色自己超过4加速的东西,但仍然允许它移动外力。

1 个答案:

答案 0 :(得分:0)

我的想法是仅限制由于用户输入而尚未主动设置velocity的位置(如果尚不高)(由于外力作用)。

类似

if(Mathf.Abs(rb.velocity.x) < maxSpeed)
{
    // calculate your new velocity according to user input
    float newVelX = XYZ;

    // than clamp it
    newVelX = Mathf.Clamp(newVelX, -maxSpeed, maxSpeed);

    // and finally asign the new vel
    rb.velocity = new Vector2(newVelX, rb.velocity.y);
}