默认情况下,PhysX似乎将脚的“摩擦”设置为无穷大,因此用向下的力(如重力)调用move
不会使您站在倾斜的表面上时向下滑动。
这与我想要的完全相反。我知道PxControllerNonWalkableMode::ePREVENT_CLIMBING_AND_FORCE_SLIDING
,但是似乎没有使用任何重力或加速度,并且我没有使用内置的slopeLimit
值。还有setPreventVerticalSlidingAgainstCeiling()
,所以地板上不存在类似的东西似乎有点奇怪。
因此,是否有任何内置方法可以消除这种人为摩擦,并允许以与CCT可以沿着墙壁和天花板滑动的方式相同的方式垂直滑动?如果没有,如何生成遵循表面法线的新的向下运动矢量?我对与数学有关的任何事情都非常恐惧,因此(psuedo-)代码示例将不胜感激。
结果是我看不懂,而我的问题的答案恰好在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
类的实例。