C# I';我在Unity 2D中无法正确实现跳转

C# I';我在Unity 2D中无法正确实现跳转,c#,unity3d,C#,Unity3d,我已经为Unity中的控制器编写了此代码。问题是Y轴的跳跃与X轴和Y轴同时跳跃的高度不同 // Update is called once per frame void FixedUpdate() { Debug.Log(rigidbody.velocity); float inputX = Input.GetAxis("Horizontal"); //Movement X if(inputX != 0 && isGrounded)

我已经为Unity中的控制器编写了此代码。问题是Y轴的跳跃与X轴和Y轴同时跳跃的高度不同

// Update is called once per frame
void FixedUpdate()
{

    Debug.Log(rigidbody.velocity);

    float inputX = Input.GetAxis("Horizontal");

    //Movement X
    if(inputX != 0 && isGrounded)
    {
        animator.SetBool("isWalking", true);
        rigidbody.velocity = new Vector2(inputX*speed, 0);

        //Turn left & right
        if(inputX > 0)
        {
            spriteRenderer.flipX = false;
        } else if (inputX < 0)
        {
            spriteRenderer.flipX = true;
        }
    } else 
    {
        animator.SetBool("isWalking", false);
    }

    //Jump
    if(Input.GetAxis("Jump") > 0 && isGrounded)
    {
        rigidbody.AddForce(Vector2.up * jumpImpulse, ForceMode2D.Impulse);
    }
}
//每帧调用一次更新
void FixedUpdate()
{
Log(刚体速度);
float inputX=Input.GetAxis(“水平”);
//运动X
如果(inputX!=0&&isGrounded)
{
SetBool(“isWalking”,true);
刚体速度=新矢量2(输入x*速度,0);
//左转和右转
如果(输入x>0)
{
spriteRenderer.flipX=false;
}else if(inputX<0)
{
spriteRenderer.flipX=true;
}
}否则
{
动画师.SetBool(“isWalking”,false);
}
//跳跃
if(Input.GetAxis(“Jump”)>0&&isground)
{
刚体.AddForce(Vector2.up*跳跃脉冲,ForceMode2D.pulse);
}
}

如果我正确理解您的代码,您只在地面上对X施加力,因此我建议删除isground变量,并在更新方法中仅将其用于跳跃

if(isGround){
  if(keypress == y){
    addforce in Y
  }
}

事实上,我在统一中有点被氧化了,但我希望对逻辑有用,我自己在跳跃物理方面也很差,但我发现这些链接可能会对你有所帮助

我还想知道哪一跳更高。你说过当你不移动跳跃时和移动时有高度差。两个人中哪一个跳得更高?你真的确定其中一个跳得比另一个高,还是看起来像一个跳得更高?如果可以,可以通过将平台放置为测试来测试这一点


很抱歉,我无法为我提供更多帮助,只能推测问题的原因。然而,我建议当你们做运动时,你们用时间乘以它。这使得移动基于时间而不是基于帧。这将使动作感觉更流畅。

你在哪里定义跳跃冲动?