有没有什么方法可以让PhysX 4.1 CCT使用自定义重力向下倾斜?

问题描述 投票:0回答:1

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

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

因此,是否有任何内置方法可以消除这种人为摩擦,并允许以与CCT可以沿着墙壁和天花板滑动的方式相同的方式垂直滑动?如果没有,如何生成遵循表面法线的新的向下运动矢量?我对与数学有关的任何事情都非常恐惧,因此(psuedo-)代码示例将不胜感激。

c++ game-physics physx
1个回答
0
投票

结果是我看不懂,而我的问题的答案恰好在SDK Guide中。

我只需要实现一个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类的实例。

© www.soinside.com 2019 - 2024. All rights reserved.