Unity 2D:在不影响跳跃高度的情况下减小跳跃距离

时间:2018-10-08 16:48:45

标签: unity3d

能做到吗?

这是我跳跃的代码:

void FixedUpdate(){
    if(!takingDamage){

        float move = Input.GetAxis("Horizontal");
        body.velocity = new Vector2(move * speed, body.velocity.y);

        if (jumping){
            body.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);         
            onGround = false;
        }       
    }

}

我已经尝试过用重力来修补,降低速度,增加质量...我为减小距离所做的所有操作都降低了高度,但是高度恰好在我想要的位置...

解决方案是在设置水平速度并降低附加速度时检查角色是否在地面上,这是这种变化的逻辑所在:

void FixedUpdate(){
    if(!takingDamage){

        float move = Input.GetAxis("Horizontal");
        if(onGround){
            body.velocity = new Vector2(move * speed, body.velocity.y);
        } else {
            body.velocity = new Vector2(move * (speed * 0.7f), body.velocity.y);
        }

        if (jumping){
            body.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);         
            onGround = false;
        }       
    }

}

1 个答案:

答案 0 :(得分:2)

您可以尝试从它们的运动中施加相反的力,例如“跳跃阻力”,如果尝试水平运动,它们的速度就会变慢。

我假设您正在使用AddForce(如果它们向左或向右移动),则只需检查它是否在跳跃,然后将addForce朝相反的方向偏移即可。

另一种方法是仅在水平方向上缩放其速度矢量。像这样:

newVelocity = new Vector3(oldVelocity.x, oldVelocity.y, oldVelocity.z * scaleFactor)