C# 特征坡度特性

C# 特征坡度特性,c#,unity3d,game-physics,C#,Unity3d,Game Physics,我正在开发一款主要关注户外运动的游戏,因此我希望角色控制尽可能让人感觉良好 我目前正在研究的问题是斜坡行为:角色站在不太陡的斜坡上时不应该下滑,而应该在太陡的斜坡上下滑 我通过激活和禁用刚体约束来实现这一点,这取决于播放器下方地面的当前角度 private const RigidbodyConstraints DefaultConstraints=RigidbodyConstraints.FreezeRotation; private const RigidbodyConstraints sta

我正在开发一款主要关注户外运动的游戏,因此我希望角色控制尽可能让人感觉良好

我目前正在研究的问题是斜坡行为:角色站在不太陡的斜坡上时不应该下滑,而应该在太陡的斜坡上下滑

我通过激活和禁用刚体约束来实现这一点,这取决于播放器下方地面的当前角度

private const RigidbodyConstraints DefaultConstraints=RigidbodyConstraints.FreezeRotation;
private const RigidbodyConstraints stationslope=RigidbodyConstraints.FreezePositionX | RigidbodyConstraints.FreezePositionZ | DefaultConstraints;
private const RigidbodyConstraints SlideDownSlope=DefaultConstraints;
地面角度采用单独的方法计算,返回上方向向量与地面法线之间的角度(以度为单位)

private float GetGroundAngle()
{
雷卡斯特击中;
if(物理.光线投射(变换.位置,矢量3.向下,外击,0.5f))
{
返回向量3.角度(向量3.向上,命中.正常);
}
返回0;
}
约束的实际激活和停用在
FixedUpdate
方法中实现。此外,坡度越陡,球员移动速度越慢

private void FixedUpdate()
{
常量浮动最大坡度角度=45;
//如果播放机接地,请检查接地角度并防止斜坡滑动
浮动角度=GetGroundAngle();
//应用约束
m_rigidbody.constraints=(m_movementVector.magnitude
我相信CharacterController组件可能对您有用

请注意,它有一个可调整的坡度限制变量


Unity标准资源中有一个第一人称控制器实现了这一点,可以在Unity中的“资源->导入包->角色”下找到它。

使用CharacterController与使用刚体物理相比,有什么缺点吗?@IanH。您应该几乎总是使用CharacterController,而不是纯物理。@IanH。我相信如果你用谷歌搜索CharacterController VS Rigidbody,会有很多关于这个话题的讨论。我终于尝试了CharacterController,并将其设置为几乎可以像我所希望的那样工作。唯一的缺点是:它不会滑下斜坡,但只会粘住斜坡,同时不允许玩家再往上爬。有办法吗让玩家滑下斜坡?这家伙有个例子可以解决这个问题。