Как реализовать 2д передвижение на наклонной плоскости?

У меня возникла огромная проблема с 2д движением по наклонной поверхности. Чтоб было понятнее, я на всякий случай объясню то, что мне надо. К примеру у нас есть горка с наклоном в условные 30 градусов. Когда я на нее подымаюсь, то при подъеме теряю скорость, а на вершине горки я просто прыгаю как на трамплине, а когда спускаюсь с нее, то персонаж спускается прыжками. Надо сделать так, чтобы он был, как бы сказать, прижат к плоскости и двигался параллельно плоскости. Уже просмотрел куча гайдов, но они то ли не подходят для меня, то ли что-то не то со мной. Вот что я имею сейчас:

private void Move()
{
    float targetVelocityX = DetermineTargetVelocityX();

    Vector2 targetVelocity = new Vector2(targetVelocityX, _rigidbody.velocity.y);
    _rigidbody.velocity = Vector2.SmoothDamp(_rigidbody.velocity, targetVelocity, ref nullVector, _smoothTime);

    bool isWalking = _moveDirection != Vector2.zero;

    if (isWalking && Mathf.Sign(_moveDirection.x) != Mathf.Sign(transform.localScale.x))
        Flip();
}

private float DetermineTargetVelocityX()
{
    float targetVelocityX = _moveDirection.x * _moveSpeed;

    if (_isCrouching)
        targetVelocityX = _moveDirection.x * _crouchSpeed;

    if (_isDashing)
        targetVelocityX = _moveDirection.x * _dashSpeed;

    return targetVelocityX;
}

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