Я использую 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.