У меня проблемы с реализацией прыжка в Unity 2D - PullRequest
0 голосов
/ 04 февраля 2020

Я написал этот код для моего контроллера в Unity. Проблема в том, что скачок по оси Y имеет высоту, отличную от скачка по оси X и Y одновременно.

// Update is called once per frame
void FixedUpdate()
{

    Debug.Log(rigidbody.velocity);

    float inputX = Input.GetAxis("Horizontal");

    //Movement X
    if(inputX != 0 && isGrounded)
    {
        animator.SetBool("isWalking", true);
        rigidbody.velocity = new Vector2(inputX*speed, 0);

        //Turn left & right
        if(inputX > 0)
        {
            spriteRenderer.flipX = false;
        } else if (inputX < 0)
        {
            spriteRenderer.flipX = true;
        }
    } else 
    {
        animator.SetBool("isWalking", false);
    }

    //Jump
    if(Input.GetAxis("Jump") > 0 && isGrounded)
    {
        rigidbody.AddForce(Vector2.up * jumpImpulse, ForceMode2D.Impulse);
    }
}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Я очень плохо себя чувствую, когда дело доходит до физики прыжков, но я нашел эти ссылки, может быть, они помогут вам.

Скрипт Unity 2d Jumping

https://answers.unity.com/questions/710765/2d-c-jump-script-addforce-1.html

Я также хочу знать, какой прыжок выше. Вы заявили, что есть разница в высоте, когда вы прыгаете без движения, против, когда вы двигаетесь. Какой из двух прыжков выше? Вы действительно уверены, что один прыгает выше, чем другой, или это просто выглядит так, как будто он прыгает выше? Вы можете проверить это, поставив платформу для проверки, если вы можете это сделать.

Извините, я не могу мне больше помочь и могу только предполагать, что может вызвать проблему. Однако я бы порекомендовал, чтобы при перемещении вы умножали его на Time.DeltaTime. Это делает время движения основанным на кадре. Это сделает движение более плавным.

0 голосов
/ 04 февраля 2020

если я правильно понимаю ваш код, вы даете силу X только тогда, когда находитесь в земле, поэтому я предлагаю удалить переменную isg Ground и использовать ее только для перехода, например, в вашем методе обновления

if(isGround){
  if(keypress == y){
    addforce in Y
  }
}

на самом деле я немного окислен в единстве, но я надеюсь быть полезным о логическом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...