【问题标题】:Unity 2D: Decrease jump distance without compromising jump heightUnity 2D:在不影响跳跃高度的情况下减少跳跃距离
【发布时间】:2018-10-09 01:40:21
【问题描述】:

可以吗?

这是我跳跃的代码:

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

}

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    您可以尝试在他们的运动中添加一个相反的力,例如“跳跃阻力”,如果他们尝试水平移动,他们会减慢速度。

    我假设如果它们向左或向右移动,你正在使用 AddForce,你可以检查它是否在跳跃,然后 addForce 在相反的方向偏移。

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

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

    【讨论】:

    • 谢谢,你真的让我走上了正轨,我会用我找到的解决方案编辑我的答案
    • 请注意,这是 2D,因此您在 z 轴上所做的更改应该在 x 轴上完成,但看起来 OP 得到了它并将其更改为修复。此评论适用于会遇到此答案的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多