Unity 3d播放器跳转不起作用,rb.addforce不起作用

时间:2019-09-18 13:52:31

标签: c# unity3d game-physics rigid-bodies

我有一个非常基本的infinite runner,我想让我的玩家跳起来。我已将rigidbody附加到我的播放器,并实例化了它。这是我的代码的一部分

 void FixedUpdate()
{
    if (OnGround)
    {
        if (Input.GetKeyDown(KeyCode.Space))
        { 
            rBody.AddForce(new Vector3(0, 10, 0), ForceMode.Impulse);
            Debug.Log("jump");
            OnGround = false;
        }
    } 
}     

void onCollisionEnter(Collision other)
{
    Debug.Log("collision");
    if (other.gameObject.CompareTag("ground"))
    {
        OnGround = true;
    }
}

我试图将这部分放在Update()中,没有结果。 有趣的是Debug.Log("jump")会显示在控制台上,但播放器不想跳。 永远不会调用方法void CollisonOther()。 我也尝试过更改velocity并使用transform.translate,没有结果

跳跃。我怎样才能使它跳起来?

4 个答案:

答案 0 :(得分:0)

可能有两件事可能是问题。确保未选中isKinematic框。角色也有可能在跳跃,但是如果您导入的精灵太大,您将看不到它(即:相对于尺寸,它跳跃的数量非常小)。您可以尝试打印更多有关该字符位置的调试语句,以查看该字符是否确实在更改。

答案 1 :(得分:0)

OnCollisionEnter应该使用大写O代替小写。按照书面规定,永远不会输入onCollisionEnter。

这是唯一可能出错的代码问题,前提是您实际上正确地分配了其他变量。但是,可能存在多种与游戏对象相关的行为。

您认为跑步者正在与游戏对象发生冲突的接地标签是吗?如果没有,它将不会跳跃。

您对跳线的刚体质量是否很高?默认值为1,它会跳得很高,但是如果质量较大,则无法获得正确的作用力。

答案 2 :(得分:0)

这似乎在您的代码中是正确的,但不知道为什么不跳。顺便说一句,您可以尝试使用此代码 只是没有AddForce并更改您正在使用的检查。

if (Input.GetButtonDown("Jump") && OnGround)
{
    rBody.velocity = new Vector2(rBody.velocity.x, jumpSpeed);
}

确保它在Update方法下,因为Update方法中的Input调用。如果您的“ OnGround”图层检查为 完美,它应该可以工作。

答案 3 :(得分:0)

我遇到了同样的问题,经过数小时的调查,在我看来,它与代码无关,但与下面的Unity错误(仍存在于2020.1.6f1中)有关。

由于某种原因,它干扰了我在代码中检查过的所有按键输入(在您的情况下为GetKey(KeyCode.Space)

https://issuetracker.unity3d.com/issues/urp-errors-are-constantly-thrown-when-active-input-handling-is-set-to-input-system-package

此修复程序将编辑-项目设置-活动输入处理-选择两者。