Из-за Rigidbody2D.MovePosition() персонаж ОЧЕНЬ долго падает

При использовании Rigidbody2D.MovePosition() персонаж передвигается нормально, но он очень долго падает, как будто у персонажа есть крылья и он их раскрыл. Убирал Rigidbody2D.MovePosition() и проблема пропадала, персонаж падал как обычно. Вот код:

    private void FixedUpdate()
    {
        Move();
    }
    
    public void Move()
    {
        _rigidbody.MovePosition(_rigidbody.position + Vector2.right * (_speed * Time.fixedDeltaTime));
    }

Пробовал заменять FixedUpdate и Time.fixedDeltaTime на Update и Time.deltaTime


Ответы (1 шт):

Автор решения: KOTlK

Используя MovePosition, вы телепортируете объект, а не перемещаете его, поэтому скорость, которая была у объекта до перемещения обнуляется. Далее к объекту применяется физика, притягивает объект немного вниз. И так в каждом FixedUpdate поэтому объект не разгоняется.

Вместо MovePosition изменяйте скорость объекта напрямую через _rigidbody.velocity

Должно получиться что-то типа этого:

private void Move(float direction)
{
    var velocity = _rigidbody.velocity;
    velocity.x = _speed * direction;
    _rigidbody.velocity = velocity;
}
→ Ссылка