Angle entre deux points

9

J'ai un personnage qui marche vers des points aléatoires dans ma chambre dans Unity. Le problème est qu'il fait toujours face à une direction, je veux écrire en C # un morceau de code qui obtiendra la direction dans laquelle le personnage est actuellement face et la position de la cible, puis calcule l'angle entre eux pour faire tourner le personnage de cette quantité. J'ai essayé la LookAtfonction, mais cela fait marcher le personnage en forme d'arc vers la cible, ce qui semble très peu naturel car il regarde constamment la cible.

Darren
la source
4
Je ne peux pas écrire une bonne réponse maintenant, mais vous avez besoin d'un trig de base. Google coordonnées polaires et atan2.
jcora

Réponses:

10

La fonction LookAt fait cela pour vous. Vous l'utilisez peut-être mal ou quelque chose ne va pas avec votre direction si vous rencontrez des problèmes avec cela. Vous pouvez également l'essayer de cette façon:

//find the vector pointing from our position to the target
dir = (Target.position - transform.position).normalized;

//create the rotation to look at the target
rotation = Quaternion.LookRotation(dir);

Vous pouvez maintenant soit vous aligner sur cette rotation, soit le faire lentement au fil du temps. (lentement au fil du temps signifie que tout ce code doit entrer dans la fonction de mise à jour)

//rotate over time
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * RotationSpeed);

//snap rotation
transform.rotation = rotation;

Pour 2D, une autre méthode alternative serait Atan2 :

angleBetween = Mathf.Atan2(point2Y - point1Y, point2X - point1X) * 180 / Math.PI))
MichaelHouse
la source
void FixedUpdate () {// obtenir la direction actuelle de la direction pour atteindre la position cible Vector3 walk = (this.mTargetPosition - this.transform.position) .normalized; // ignore 3d walk.y = 0.0f; walk.Normalize (); // se déplace dans la direction souhaitée this.transform.LookAt (mTargetPosition); this.transform.Translate (-walk); }} c'est ainsi que j'ai configuré la fonction lookat telle quelle, je ne peux pas dire ce qui ne va pas sauf si je suppose qu'elle ne devrait pas être dans fixedUpdate?
Darren
Je ne suis pas sûr. Qu'est-ce que ça fait? Quand je travaille sur le pilotage, j'ai des lignes de débogage tracées partout. J'ai des lignes indiquant la direction des gobelins, des lignes d'accélération et des lignes de vitesse. Réglez-les tous sur des couleurs différentes afin que vous sachiez laquelle est laquelle, cela vous aidera vraiment avec le débogage visuel. Il vous permet de savoir lequel ne semble pas correct et vous pouvez ensuite en savoir plus.
MichaelHouse