Unity 2D персонаж слишком много прыгает - PullRequest
0 голосов
/ 06 июня 2019

Во-первых, извините за мой плохой английский. Моя проблема так ясна;

Мой персонаж иногда прыгает очень высоко.

Обычно; GIF; нормальный прыжок

иногда это происходит, если персонаж прыгает в угол коллайдера; GIF; ненормальный прыжок в высоту

Почему это происходит? Как я могу решить эту проблему?

это мои коды;

    private void FixedUpdate()
{
    jumpButton = GameObject.Find("Jump").GetComponent<Button>();
    jumpButton.onClick.AddListener(Jump);

    groundCheck = GameObject.Find("GroundCheck").GetComponent<Transform>();
    isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround);

    MoveInput = SimpleInput.GetAxisRaw("Horizontal");
    rb.velocity = new Vector2(MoveInput * speed, rb.velocity.y);

    if (isGrounded && jump)
    {
        rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        jump = false;
    }
}

public void Jump()
{
    jump = true;
}

1 Ответ

1 голос
/ 06 июня 2019

Как у вас есть, вы можете ускорять движение вверх при каждом прыжке.

Чтобы прыжок каждый раз создавал одну и ту же скорость, просто установите скорость y на некоторое значение. Мы можем использовать jumpForce/rb.mass, чтобы получить то же значение, которое дает AddForce с ForceMode2D.Impulse.

private void FixedUpdate()
{
    jumpButton = GameObject.Find("Jump").GetComponent<Button>();
    jumpButton.onClick.AddListener(Jump);

    groundCheck = GameObject.Find("GroundCheck").GetComponent<Transform>();
    isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround);

    MoveInput = SimpleInput.GetAxisRaw("Horizontal");
    rb.velocity = new Vector2(MoveInput * speed, rb.velocity.y);

    if (isGrounded && jump)
    {
        rb.velocity = new Vector2(rb.velocity.x, jumpForce/rb.mass);
        jump = false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...