Как решить двойной прыжок

2 ada dudu [2016-09-07 01:41:00]

Я следил за учебником Unity для "Roll-A-Ball" и добавил некоторые расширения. Мяч теперь может прыгать, но он прыгает слишком много раз каждый прыжок; Я просто хочу, чтобы мяч один раз в то время, когда я нажимаю на SPACE. Теперь я могу нажать 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);

     }
    }

unity3d


3 ответа


0 Решение ada dudu [2016-09-24 20:01:00]

Я нашел решение. Решение состоит в том, чтобы добавить 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;
}

4 Gustavo6046 [2016-09-07 01:51:00]

Это может немного успеть (поскольку это не пошаговое руководство, а схема).

Вы должны проверить, когда мяч достигает пола, проверяя, достигает ли скорость когда-либо 0 или выше после первого нажатия. После этого установите bool (здесь с именем CanJump) в true (или независимо от того, что определяет ваш язык для true).

Есть еще несколько проверок, которые нужно сделать; когда CanJump установлен в true (потому что ваша скорость теперь >= 0), установите также переменную int, называемую NumJumps 0. И увеличивайте ее каждый прыжок. Таким образом, вы можете установить CanJump на false после двух прыжков, что предотвращает прыжок мяча.

Обратите внимание: я ничего не знаю о Unity 3D, но у меня есть куча опыта в 3D-играх (например, Unreal Engine 1 и, таким образом, в моделях UT99).


0 Aaron Franke [2017-02-24 04:17:00]

Я нашел, что лучшим решением является использование Raycast.

bool isOnGround = Physics.Raycast(transform.position, -Vector3.up, 1.875f);

Замените 1.875f расстоянием между вашим происхождением персонажа и землей, плюс немного больше. Затем вы можете проверить isOnGround когда решаете, произойдет ли переход или нет.