我的角色在移动时不会粘贴在斜面上,请帮忙

using UnityEngine;

public class PlayerMovement : MonoBehaviour

{

private CharacterController controller;

[Header("移动设置")]

public bool 骶髂关节锁定;

public float 玩家速度 = 12f;

public float 空中控制 = 0.5f; //空中控制

public float 玩家重力 = -12f;

public float 玩家跳跃力 = 15f;

public bool 运动中;

public float 运动乘数;

[Header("地面检查")]

public Transform 地面检查;

public float 地面距离 = 0.4f;

public LayerMask 地面遮蔽;

public LayerMask 对象遮蔽;

[Header("实际移动")]

public Vector3 速度;

public bool 有地;

public bool 运动中;

public bool 上一帧有地;

private Vector3 上次位置;

public bool 运动开启;

public Vector3 外部速度;

public float 在空中恶化 = 20f;

public float 在地面恶化 = 20f;

public Vector3 输入方向;

public float 有地后时间;

public float 我的垂直速度;

public bool 开始跳跃;

public bool đang在空中;

[Header("俯卧")]

public bool 俯卧;

public float 俯卧速度;

public float 俯卧大小;

[Header("斜面移动和滑动")]

public float 最大斜面角度;

private RaycastHit 斜面检查;

public Vector3 斜面速度;

//让玩家粘附于表面

void Start()

{

controller = GetComponent<<CharacterController>>();

if (地面检查 == null)

地面检查 = transform.Find("地面检查");

开始移动();

}

public bool 开始移动()

{

运动开启 = true;

return 运动开启;

}

public bool 停止移动()

{

运动开启 = false;

return 运动开启;

}

public bool 地面检查()

{

有地 = Physics.CheckSphere(地面检查.position, 地面距离, 地面遮蔽 | 对象遮蔽);

if (开始跳跃) {有地 = false; 开始跳跃 = false; đang在空中 = true; }

if (有地) { đang在空中 = false; }

else { đang在空中 = true; }

return 有地;

}

public bool 在斜面()

{

if (Physics.Raycast(transform.position, Vector3.down, out 斜面检查, 1.1f))

{

float 角度 = Vector3.Angle(Vector3.up, 斜面检查.normal);

return 角度 < 最大斜面角度 && 角度 != 0;

}

return false;

)

public Vector3 斜面移动方向()

{

return Vector3.ProjectOnPlane(输入方向, 斜面检查.normal).归一化;

}

void Update()

{

地面检查();

上一帧有地 = 有地;

//...