Столкновение по оси X означает 0 движение по оси Y

Я разрабатываю платформер в Unity, используя 2D движок. У меня есть персонаж игрока, у которого есть BoxCollider2D и RigidBody, и несколько "стен" с BoxColliders.

Теперь я скопировал скрипт для переноса плеера из другого проекта и внес некоторые изменения. Часть, связанная с движением, выглядит следующим образом:

public void FixedUpdate()
    {
        physVel = Vector2.zero;

        // move left
        if(Input.GetKey(KeyCode.LeftArrow))
        {
            physVel.x = -runVel;
        }

        // move right
        if(Input.GetKey(KeyCode.RightArrow))
        {
            physVel.x = runVel;
        }

        // jump
        if(Input.GetKey(KeyCode.UpArrow))
        {
            if(jumps < maxJumps)
            {
                jumps += 1;
                if(jumps == 1)
                {
                    _rigidbody.velocity = new Vector2(physVel.x, jumpVel);
                }
            }
        }

        //Apply gravity

        _rigidbody.AddForce(-Vector3.up * fallVel);


        // actually move the player
        _rigidbody.velocity = new Vector2(physVel.x, _rigidbody.velocity.y);
    }

Теперь это работает отлично.

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

Я что-то упускаю из виду?

1 ответ

Решение

РЕДАКТИРОВАТЬ: попробуйте добавить материал с нулевым трением как к игроку, так и к стенам, и посмотрите, что произойдет, если он остановится, это ошибка трения.

Другие вопросы по тегам