Je viens vers vous car cela fait quelques jours que je bloque sur un problème de physique. J'ai fait beaucoup de recherches avant de poster sur le forum, mais je ne trouve pas la réponse à mon problème.
Mon script consiste à accrocher un objet en mouvement autour d'un autre objet ( en mouvement ou non ) et de le faire orbiter autour, tout en conservant sa vitesse, et de pouvoir le décrocher. J'ai pour cela fait un script qui crée un HingeJoint à certaines conditions. Les deux objets possèdent un RigidBody n'utilisant pas la gravité et drag et angular drag sont à 0. L'objet s'accroche bien, il n'est pas ralenti en s'accrochant, mais ralentit petit à petit une fois accroché. Je tente donc d'utiliser le moteur du HingeJoint, mais la valeur targetVelocity est en degrés par seconde. Après quelques recherches, je tombe sur la formule suivante :
vitesse angulaire (rad/s) = vitesse ( m/s ) / rayon (m)
En l'appliquant dans mon script, j'obtiens :
Code : Tout sélectionner
float radius = Vector3.Distance(transform.position, other.position);
float angularVelocity = rb.velocity.magnitude / radius;
//Conversion de rad/s en d/s
targetVelocity = angularVelocity * Mathf.Rad2Deg;
Si quelqu'un voit le problème de mon calcul, ou peut me proposer une autre solution n'impliquant pas forcement un HingeJoint, j'en serai ravie!
Merci d'avoir lu,
Bonne soirée!