如何解决双跳

时间:2016-09-06 22:41:41

标签: unity3d

我已经关注了#34; Roll-A-Ball"的Unity教程,并添加了一些扩展。球现在可以跳跃,但每次跳跃都跳得太多次;当我按下SPACE时,我只想要一次球。现在我可以按空格键3次,它会越来越高。

  if (Input.GetKeyDown(KeyCode.Space))
        {
            Vector3 jump = new Vector3(0.0f, 150.0f, 0.0f);

            rb.AddForce(jump);
        } 

编辑:

尝试过更改一下代码,但现在我只能跳一次(第一次)

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
      if (Input.GetKeyDown(KeyCode.Space) && jump.y <= 0.0f)
    {
        jump.Set(0.0f, 150f, 0.0f);
        rb.AddForce(jump);

     }
    }

2 个答案:

答案 0 :(得分:4)

这可能有点难以理解(因为它不是一步一步的教程,而是一个方案)。

您必须检查球到达地面的时间,检查第一次按下后速度是否达到0或以上。一旦完成,然后将一些bool(此处命名为CanJump)设置为true(或者您的语言定义为true)。

还有一些检查要做;一旦CanJump设置为true(因为你的速度现在是>= 0),还要将一个名为NumJumps的int变量设置为0.并在每次跳转时递增它。这样,您可以在两次跳跃后将CanJump设置为false,从而防止球跳跃。

请注意我对Unity 3D一无所知,但我对3D游戏有很多经验(比如虚幻引擎1和UT99 modding)。

答案 1 :(得分:0)

我找到了解决方案。解决方案是添加OnCollisionEnter,您可以处理玩家与地面碰撞时会发生什么。此外,我添加了一个计数器,当玩家跳起时设置为0,当他与地面碰撞时再次设置为0。

柜台:

  if (Input.GetKeyDown(KeyCode.Space))
    {
        if (JumpCount < 1)
        {
            Vector3 jump = new Vector3(0.0f, 250.0f, 0.0f);
            rb.AddForce(jump);
            JumpCount++;
        } 
    }

此处的计数器设为0:

 void OnCollisionEnter(Collision other)
{
    JumpCount = 0;
}