Игрок скользит по поверхности Unity

Когда я отжимаю клавиши ходьбы мой игрок продолжает движение по инерции(скользить). У меня есть direction(направление движение), если его оставить ненормализованным, то такой эффект пропадает. Вопрос, как решить эту проблему не убирая normalized? Вот скрипты:

KeydoardInput:

    [SerializeField] private PlayerMovement _movement;
    [SerializeField] private Camera _camera;

    private void Update()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        float jump = Input.GetAxis("Jump");
        
        Vector3 camDirectionForward = _camera.transform.forward;
        Vector3 camDirectionRight = _camera.transform.right;

        Vector3 direction = camDirectionForward * vertical + camDirectionRight * horizontal;

        // Если убрать .normalized проблема будет решена.
        _movement.Move(direction.normalized);
    }

PlayerMovement:

    private Rigidbody _rb;
    [SerializeField] private float _speed;

    void Start()
    {
        _rb = GetComponent<Rigidbody>();
    }

    public void Move(Vector3 direction)
    {
        _rb.MovePosition(_rb.position + direction * (_speed * Time.deltaTime));
    }

P.S Мне нужен camDirectionForward и camDirectionRight чтобы игрок двигался не по мировым координатам а туда куда смотрит камера.


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

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

Придумал решение. Лучше вместо получения вектора направления камеры, получить вектор направления тела.

Вот так:

Vector3 direction = transform.forward * vertical + transform.rigth * horizontal;
→ Ссылка