提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
前几天在做项目的时候要求角色控制器加入斜坡下滑功能,看到网上相关信息比较少,就打算自己写一个。
一、原理
使用角色控制器的move方法,只需要算出角色相对于斜坡下滑的方向,给定一个速度使其向该方向移动即可
二、具体实现
在角色底部向下打射线获取斜面法向量,并计算其与上方向量的夹角得到斜坡与水平面角度,判断是否为过高角度(可以去用角色控制器的上坡角度去比较)。
若为过高角度则执行下滑。
斜坡下滑方向则对角色上方向量与射线获取的斜坡法向量使用叉乘,得到平行于斜坡的向量(该向量方向在斜坡任何位置都是一致的),使用该向量再次与斜坡法向量进行叉乘,得到平行于斜坡,方向由斜坡高处沿低处的下滑向量。
将归一化向量与给定速度赋予Move方法即可实现斜坡下滑。
参考代码
计算斜坡下滑方向代码:
if (m_needSlide)
{
m_slopeHorizon = Vector3.Cross(m_slopeHit.normal, Vector3.up);
m_slopeVertical = Vector3.Cross(m_slopeHit.normal, m_slopeHorizon);
m_slideDir = m_slopeVertical.normalized;
}
else m_slideDir = Vector3.zero;