Персонаж плавно "слетает" с объектов при ходьбе вперёд с пропасти (метод 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; }
}
}