0

默认情况下,PhysX 似乎将你脚上的“摩擦力”设置为无穷大,因此move当你站在倾斜的表面上时,用向下的力(如重力)呼唤不会导致你滑倒。

这与我想要的完全相反。我知道PxControllerNonWalkableMode::ePREVENT_CLIMBING_AND_FORCE_SLIDING,但这似乎没有使用任何重力或加速度,而且我没有使用内置slopeLimit值。还有setPreventVerticalSlidingAgainstCeiling(),所以地板上不存在类似的东西似乎有点奇怪。

那么,是否有任何内置方法可以禁用这种人为摩擦,并允许垂直滑动,就像 CCT 可以沿着墙壁和天花板滑动一样?如果没有,我怎么能生成一个遵循表面法线的新的向下运动矢量?我对与数学相关的任何事情都非常糟糕,因此(伪)代码示例将不胜感激。

4

1 回答 1

0

结果我看不懂,我的问题的答案就在SDK Guide中。

我只需要实现 a PxControllerBehaviorCallback,并让它PxControllerBehaviorFlag::eCCT_SLIDE为每个函数返回。

    virtual physx::PxControllerBehaviorFlags getBehaviorFlags(const physx::PxShape& shape, const physx::PxActor& actor) {
        return physx::PxControllerBehaviorFlag::eCCT_SLIDE;
    }

    virtual physx::PxControllerBehaviorFlags getBehaviorFlags(const physx::PxController& controller) {
        return physx::PxControllerBehaviorFlag::eCCT_SLIDE;
    }

    virtual physx::PxControllerBehaviorFlags getBehaviorFlags(const physx::PxObstacle& obstacle) {
        return physx::PxControllerBehaviorFlag::eCCT_SLIDE;
    }

然后设置PxControllerDesc->behaviorCallback为我PxControllerBehaviorCallback班级的一个实例。

于 2019-12-13T22:37:46.557 回答