C# 当我的球员跳跃时,他只能跳到同一个位置,不知道为什么?

C# 当我的球员跳跃时,他只能跳到同一个位置,不知道为什么?,c#,visual-studio,unity3d,C#,Visual Studio,Unity3d,我大概一个月前才开始学习unity,对C语言来说非常陌生。所以我只是按照一个教程在我的播放器中添加了多个跳跃,但在我注入代码后,他在移动时无法跳跃。他现在只跳到同一个地方。我搞不懂这个问题 void Update() { HandleInput(); if (isGrounded == true) { extraJumps = extraJumpsValue; } if (

我大概一个月前才开始学习unity,对C语言来说非常陌生。所以我只是按照一个教程在我的播放器中添加了多个跳跃,但在我注入代码后,他在移动时无法跳跃。他现在只跳到同一个地方。我搞不懂这个问题


    void Update()
    {
        HandleInput();

        if (isGrounded == true)
        {
            extraJumps = extraJumpsValue;
        }
        if (Input.GetKeyDown(KeyCode.Space) && extraJumps > 0)
        {
            myRigidbody.velocity = Vector2.up * jumpForce;
            extraJumps--;
        }
        else if (Input.GetKeyDown(KeyCode.Space) && extraJumps == 0 && isGrounded == true)
        {
            myRigidbody.velocity = Vector2.up * jumpForce;
        }
    }


既然我不知道你的动作代码,我就假设它没问题。角色控制器的.isground可能有问题。尝试在控制台上记录它,并查看它在移动时返回的内容。它有时行为不端。如果是这样,您可以:

  • 确保施加一些向下的力(例如重力)
  • 使用光线投射实现您自己的地面检测(Youtube上有大量教程)

问题是两个动作之间发生重叠,由于我们看不到您的移动代码,我不确定还有什么会导致此问题,但此代码有一个陷阱,即此行:

myRigidbody.velocity=矢量2.up*跳跃力

这条线将把对象的速度0值放在x轴上,跳跃力值放在y轴上,因此无论你在x轴上做什么(移动、跑步…),它都将停止,并且只能在y轴上跳跃跳跃力值,并且只能垂直跳跃,这就是发生在你身上的事情,因为我假设你用同样的方法来实现你的动作代码。因此,为了避免这个陷阱,您需要向对象的状态添加力,以保持运动的动态性,而不是静态地控制它(这是一种糟糕的做法):

myRigidbody.AddForce(矢量2.up*跳跃力)

有关AddForce的更多信息,请选中此项:

另外,如果你能把你的移动代码,我们可以检查它,或为你写另一个代码。 祝你好运