我正在使用 PhysX 3.3.0。
我的角色是一个胶囊控制器,我需要能够检索控制器的实际速度,这似乎比应该完成的要难得多。
我已经尝试在场景的主要模拟之后检索与控制器关联的演员的速度,但是这只是返回虚假值,很可能是因为控制器只是引擎盖下的运动学演员。
现在,我能想到的唯一选择是自己跟踪速度,但这并不是那么简单。我可以轻松地跟踪自己对速度的更改,例如通过运动输入应用的速度。然而,只要控制器不与任何东西发生碰撞,这才是准确的。通过移动功能移动控制器后,控制器的速度可能已因与地板或墙壁等的碰撞而改变。移动功能返回碰撞标志,但它们只告诉我侧面某处是否发生碰撞,底部或顶部,但这不够准确,无法手动得出新的速度。
这似乎是一个相当大的疏忽,所以也许我只是在这里遗漏了一些东西。如果 PhysX 不提供这样的功能,我如何准确跟踪控制器的速度?
// 编辑
这就是我在场景模拟后获取速度的方式:
void ControllerPhysObj::UpdateVelocity()
{
physx::PxRigidDynamic *actor = m_controller->getActor();
physx::PxVec3 vel = actor->getLinearVelocity();
m_velocity.x = vel.x;
m_velocity.y = vel.y;
m_velocity.z = vel.z;
}
m_controller 是一个 PxCapsuleController。