Angolo tra due punti


9

Ho un personaggio che cammina verso punti casuali nella mia stanza in Unity. Il problema è che si trova sempre di fronte in una direzione, voglio scrivere in C # un pezzo di codice che ottenga la direzione in cui si trova attualmente il personaggio e la posizione del bersaglio, quindi calcola l'angolazione tra di loro per girare il personaggio. Ho provato la LookAtfunzione, ma ciò fa camminare il personaggio in una forma ad arco verso il bersaglio che sembra molto innaturale mentre guarda costantemente il bersaglio.


4
Non posso scrivere una risposta corretta ora, ma hai bisogno di un trig di base. Coordinate polari di Google e atan2.
jcora,

Risposte:


10

La funzione LookAt fa questo per te. È possibile che tu lo stia usando in modo improprio o che ci sia qualcosa che non va nello sterzo se riscontri problemi. Puoi provarlo anche in questo modo:

//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);

Ora puoi scattare verso quella rotazione oppure puoi farlo lentamente nel tempo. (lentamente nel tempo significa che tutto questo codice deve entrare nella funzione di aggiornamento)

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

//snap rotation
transform.rotation = rotation;

Per 2D un altro metodo alternativo sarebbe Atan2 :

angleBetween = Mathf.Atan2(point2Y - point1Y, point2X - point1X) * 180 / Math.PI))

void FixedUpdate () {// ottiene l'attuale direzione di sterzo per raggiungere la posizione target Vector3 walk = (this.mTargetPosition - this.transform.position) .normalized; // ignora 3d walk.y = 0.0f; walk.Normalize (); // sposta nella direzione desiderata this.transform.LookAt (mTargetPosition); this.transform.Translate (Affenberg); }} questo è il modo in cui ho impostato la funzione lookat così com'è, non posso dire cosa c'è che non va, tranne per il fatto che forse non dovrebbe essere in fixedUpdate?
Darren,

Non ne sono sicuro. Cosa sta facendo? Quando lavoro sullo sterzo, ho tracciato delle linee di debug dappertutto. Ho delle linee che mostrano la direzione in cui i goblin sono rivolti, le linee di accelerazione e di velocità. Impostali tutti su colori diversi in modo da sapere quale è, questo ti aiuterà davvero con il debug visivo. Ti consente di sapere quale non ha l'aspetto giusto e puoi quindi approfondire.
MichaelHouse
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.