繁体   English   中英

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

[英]Unity 3d player jump does't work, rb.addforce doesn't work

我有一个非常基本的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 ,没有结果

跳。 我怎样才能让它跳起来?

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

OnCollisionEnter 应该有一个大写的 O 而不是小写。 正如所写,永远不会输入 onCollisionEnter。

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

地面标签是否应用于您认为跑步者正在碰撞的游戏对象? 如果没有,它不会跳。

跳跃者刚体的质量是否非常高? 默认值为 1,它跳得相当高,但如果质量较大,则无法获得适当的力。

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

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

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

我遇到了同样的问题,经过数小时的调查,在我的情况下,它与代码无关,而是与下面的 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM