第一人称控制器卡在墙上

时间:2015-07-13 21:52:22

标签: c# unity3d

我正在开发一个类似于我的世界的基于体素的项目,我和我的第一个人控制器遇到了问题。

http://pastebin.com/XaFCM8zC - >我会发布整件事情,所以没有遗漏任何重要内容。

我有这个OnCollisionStay方法,可以检测我遇到的墙角(AKA我不想在90度的墙上跑,或者能够垃圾跳到爬山)

void OnCollisionStay(Collision collision){
    foreach (ContactPoint contactPoint in collision.contacts) {
        groundNormal += contactPoint.normal;
        if (contactPoint.normal.y > Mathf.Cos (slopeLimit * Mathf.Deg2Rad)) {
            tooSteep = false;
        }
    }
    if (collision.contacts.Length > 0) {
        groundNormal /= collision.contacts.Length;
    }
    grounded = true;
}

它工作正常,但问题出现在我的FixedUpdate方法中,我通过这一行限制我的移动代码:

    if (!tooSteep || !grounded) {

所以我只能移动,如果它不要陡峭,或者我没有接地,但我试图把它移到我可以移动的任何地方,只是不要走路/跳墙。

我尝试制作一个“canJump”变量,但只解决了部分变量。 如果用户与太陡的墙碰撞,如何防止用户输入影响y速度?

1 个答案:

答案 0 :(得分:0)

打电话给我的一个伙伴,他说我明显忽视了。

显然,团结的默认对手对它们有一定程度的摩擦。我刚刚创建了一个物理材料,其中0系数用于两种类型的摩擦,并且按预期工作,我只需要限制墙跳,这不是一个问题。

希望这有助于将来。