有没有办法让 PhysX 4.1 CCT 使用自定义重力滑下斜坡?

Is there any way to allow a PhysX 4.1 CCT to slide down slopes using custom gravity?

本文关键字:自定义 PhysX CCT 有没有      更新时间:2023-10-16

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

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

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

事实证明我看不懂,我的问题的答案就在SDK指南中。

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