我有一个非常基本的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
,没有结果
跳跃。我怎样才能使它跳起来?
答案 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)
此修复程序将编辑-项目设置-活动输入处理-选择两者。