Saya memutar karakter permainan saya untuk menonton di target menggunakan kode berikut:
transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f)
startQuaternion adalah rotasi karakter saat ini ketika target baru diberikan.
lookQuaternion adalah arah karakter yang harus dilihat dan diatur seperti ini:
destinationVector = currentWaypoint.transform.position - transform.position;
lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up);
turningNormalizer baru saja Time.deltaTime
bertambah dan turningSpeed
merupakan nilai statis yang diberikan dalam editor.
Masalahnya adalah bahwa sementara karakter berubah sebagaimana mestinya sebagian besar waktu, ia memiliki masalah ketika harus melakukan hampir 180 derajat. Maka kadang-kadang kegugupan dan mencerminkan rotasi:
Dalam gambar yang digambar dengan buruk ini, karakter (di kanan) mulai berbelok ke arah lingkaran di sebelah kiri. Alih-alih hanya memutar baik melalui kiri atau kanan itu memulai "tarian cermin" ini:
- Itu mulai berputar ke arah menghadap baru
- Kemudian tiba-tiba terkunci ke sudut yang sama tetapi di sisi lain dan terus berputar
Itu melakukan "mirroring" begitu lama sampai terlihat pada target. Apakah ini hal dengan angka empat, slerping / lerping atau sesuatu yang lain?
EDIT1: Rupanya masalah tidak muncul dari rotasi itu sendiri. Masalah yang lebih mungkin adalah bahwa karakter bergerak ke arah menghadap sementara itu berputar. Seperti membatasi sudut, antara menghadap dan target, ketika karakter dibiarkan bergerak mengurangi dan kadang-kadang menghilangkan rotasi jittering / mirroring.
Ini tentu saja menimbulkan lebih banyak pertanyaan, mengapa karakter tidak dapat bergerak dan berputar pada saat yang sama tanpa masalah? Kode yang digunakan untuk perpindahan:
transform.Translate(Vector3.forward * runningSpeed/10f * Time.deltaTime);