我的角色在移动时不会粘贴在斜面上,请帮忙
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()
{
地面检查();
上一帧有地 = 有地;
//...
评论 (0)