Персонаж плавно "слетает" с объектов при ходьбе вперёд с пропасти (метод Velocity)

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

вот мой код

using UnityEngine;
public class PlayerMove : MonoBehaviour
{
    Rigidbody rb;
    [SerializeField] int MoveSpeed;
    [SerializeField] int SprintSpeed;
    public float JumpPower = 1f;
    protected bool onGround = true;
    private void Start()
    {rb = GetComponent<Rigidbody>(); }
    void OnCollisionEnter(Collision collision)
    {   if (collision.gameObject.tag == "Ground")
            { onGround = true; }}
    private void FixedUpdate()
    { 
        if (Input.GetKey(KeyCode.Space) && (onGround))
            { rb.AddForce(transform.up * JumpPower);
            onGround = false; }

        else if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.LeftControl) && (onGround))
            { rb.velocity = transform.forward * SprintSpeed * Time.fixedDeltaTime; }

        else if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.D) && (onGround))
            { rb.velocity = (transform.forward * MoveSpeed * Time.fixedDeltaTime) + (transform.right * MoveSpeed * Time.fixedDeltaTime); }

        else if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.A) && (onGround))
            { rb.velocity = (transform.forward * MoveSpeed * Time.fixedDeltaTime) + (-transform.right * MoveSpeed * Time.fixedDeltaTime); }

        else if (Input.GetKey(KeyCode.S) && Input.GetKey(KeyCode.D) && (onGround))
            { rb.velocity = (-transform.forward * MoveSpeed * Time.fixedDeltaTime) + (transform.right * MoveSpeed * Time.fixedDeltaTime); }

        else if (Input.GetKey(KeyCode.S) && Input.GetKey(KeyCode.A) && (onGround))
            { rb.velocity = (-transform.forward * MoveSpeed * Time.fixedDeltaTime) + (-transform.right * MoveSpeed * Time.fixedDeltaTime); }

        else if (Input.GetKey(KeyCode.W) && (onGround))
            { rb.velocity = transform.forward * MoveSpeed * Time.fixedDeltaTime; }

        else if (Input.GetKey(KeyCode.S) && (onGround))
            { rb.velocity = -transform.forward * MoveSpeed * Time.fixedDeltaTime; }

        else if (Input.GetKey(KeyCode.D) && (onGround))
            { rb.velocity = transform.right * MoveSpeed * Time.fixedDeltaTime; }

        else if (Input.GetKey(KeyCode.A) && (onGround))
            { rb.velocity = -transform.right * MoveSpeed * Time.fixedDeltaTime; }
    }
}

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