Sudut antara dua titik

9

Saya memiliki karakter yang berjalan ke titik-titik acak di kamar saya di Unity. Masalahnya adalah dia selalu menghadapi satu arah, saya ingin menulis dalam C # sepotong kode yang akan mendapatkan arah karakter saat ini menghadap dan posisi target, lalu bekerja di sudut di antara mereka untuk mengubah karakter yang jumlahnya. Saya telah mencoba LookAtfungsinya tetapi itu membuat karakter berjalan dalam bentuk busur ke arah target yang terlihat sangat tidak wajar karena terus-menerus melihat target.

Darren
sumber
4
Saya tidak bisa menulis jawaban yang tepat sekarang, tetapi Anda perlu trigonometri dasar. Google kutub koordinat dan atan2.
jcora

Jawaban:

10

Fungsi LookAt melakukan ini untuk Anda. Anda mungkin menggunakannya dengan tidak benar, atau ada yang salah dengan kemudi Anda jika Anda mengalami masalah dengan ini. Anda dapat mencobanya dengan cara ini juga:

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

Sekarang Anda dapat beralih ke rotasi itu, atau Anda dapat melakukannya perlahan dari waktu ke waktu. (pelan-pelan seiring waktu berarti semua kode ini harus masuk ke fungsi pembaruan)

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

//snap rotation
transform.rotation = rotation;

Untuk 2D metode alternatif lain adalah Atan2 :

angleBetween = Mathf.Atan2(point2Y - point1Y, point2X - point1X) * 180 / Math.PI))
MichaelHouse
sumber
membatalkan FixedUpdate () {// dapatkan arah kemudi saat ini untuk mencapai posisi target berjalan Vector3 = (this.mTargetPosition - this.transform.position) .normalisasi; // abaikan 3d walk.y = 0.0f; walk.Normalisasi (); // pindah ke arah yang diinginkan this.transform.LookAt (mTargetPosition); this.transform.Translate (-walk); }} ini adalah cara saya mengatur fungsi lookat sebagaimana adanya, saya tidak bisa mengatakan apa yang salah dengan itu kecuali saya berasumsi mungkin tidak seharusnya di perbarui?
Darren
Saya tidak yakin. Apa yang sedang dilakukannya? Ketika saya bekerja pada setir, saya memiliki garis debug yang digambar di semua tempat. Saya memiliki garis yang menunjukkan arah yang dihadapi goblin, garis akselerasi dan garis kecepatan. Atur semuanya ke warna yang berbeda sehingga Anda tahu yang mana, ini akan sangat membantu dengan debugging visual. Ini membuat Anda tahu mana yang tidak beres dan kemudian Anda bisa melihat lebih dalam.
MichaelHouse