Aunque no he trabajado específicamente con el motor de física de bala, he hecho algo muy similar en otro motor de física. La forma en que lo resolví fue establecer la velocidad lineal del cuerpo rígido en lugar de traducirlo directamente. El movimiento y las colisiones fueron manejados automáticamente por la fase de actualización del motor de física.
De la documentación parece haber un btRigidBody::setLinearVelocity
método que puede usar. Entonces, por ejemplo, si no desea que ocurran aceleraciones, simplemente configure la velocidad lineal en un valor apropiado cada vez que el personaje se mueva, y vuelva a establecerlo en (0,0,0) cuando se supone que el personaje se detiene (es decir, cuando el jugador suelta la llave).
En cuanto a qué valores usar, el enfoque habitual sería comenzar con la velocidad deseada de su personaje (como flotante / escalar) y luego multiplicarlo por un vector normalizado que apunte en la dirección que desea mover. Por lo que puedo ver, la btVector3
clase ya tiene métodos para todo esto.
Alternativamente, podría considerar tratar al personaje como un objeto físico completo y manejar el movimiento utilizando los métodos applyForce
o applyImpulse
. Esto daría como resultado una aceleración del cuerpo, por lo que tus personajes tendrán impulso y los resultados probablemente se verán mejor de esta manera. Pero debe tomar algunas medidas adicionales, por ejemplo, asegurándose de que la velocidad lineal nunca exceda un cierto límite, ya sea sujetándola o jugando con amortiguación / fricción. Por lo tanto, será un poco más difícil de implementar y afinar.
Experimente con ambos enfoques y luego elija el que mejor se adapte a sus necesidades.