Unity: игрок слишком близко к стене "бросает вызов" гравитации [видео] - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть маленький платформер, куда игрок может прыгать.Прыжки работают отлично, игрок прыгает высоко в воздухе и падает обратно в зависимости от силы тяжести, которую я ему установил.Однако, как только игрок переходит границу, где он может упасть после этого, его физика, кажется, застревает до конца.Вместо того, чтобы упасть, он медленно спускается, как будто он сделан из листьев или около того.

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

Я записал эту проблему здесь:

https://youtu.be/CE-W4wmMqcA

Это настройки моего игрока:

enter image description here

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

Кроме того, мое исправленное обновление, куда я прыгаю (ловлю бул от обновления, делаю физику в исправленном:)

void FixedUpdate()
{
    currentPlayerSpeed = rb.velocity.x;

    if (moveLeft)
    {
        rb.AddForce((Vector2.left * movementSpeed * Time.deltaTime) - rb.velocity, ForceMode2D.Force);

    }
    if (moveRight)
    {
        rb.AddForce((Vector2.right * movementSpeed * Time.deltaTime) - rb.velocity, ForceMode2D.Force);
    }

    if (jump)
    {

        if (isGrounded)
        {
            isGrounded = false;

            rb.AddForce(Vector2.up * (jumpHeight * counterForJumpHeight) * Time.deltaTime, ForceMode2D.Impulse);
            jump = false;

            anim.SetBool("bool_anim_isJumping", true);
        }

        if (timer != null)
            timer.Stop();

        counterForJumpHeight = jumpMulitMin;

        jumpAlreadCharging = false;

    }

    if (!moveLeft && !moveRight) // if no movement input is happening
    {
        if (isGrounded)
        {
            StopVelocity();
        }

    }
}

1 Ответ

0 голосов
/ 06 февраля 2019

Хорошо, я думаю, что я понял это, когда вы падаете, и ваши moveLeft и moveRight переменные имеют значение false, поэтому вы вызываете StopVelocity, и это, если оператор выполняется.

if (!moveLeft && !moveRight) // if no movement input is happening
{
    if (isGrounded)
    {
        StopVelocity();
    }

}

Этовызывает это странное поведение.Так как ты не прыгнул, а только упал isGrounded тоже верно :)

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