Quaternion Slerp dalam Perpaduan: Panduan untuk Putaran Bertambah
Dalam enjin Unity, objek berputar secara beransur-ansur dari semasa ke semasa adalah penting untuk mencipta pemandangan dinamik. Quaternion.Slerp
ialah alat berkuasa yang membolehkan anda menginterpolasi putaran dengan lancar.
Memahami Quaternion.Slerp
Quaternion.Slerp
mengambil sebagai input dua kuaternion (mewakili putaran) dan faktor pencampuran. Ia mengembalikan kuaternion baharu yang diinterpolasi antara dua kuaternion input.
Faktor pencampuran, juga dipanggil masa (t), berjulat dari 0 hingga 1. Apabila t ialah 0, kuaternion keluaran adalah sama dengan kuaternion input pertama. Apabila t ialah 1, kuaternion keluaran adalah sama dengan kuaternion input kedua.
Perbandingan Lerp dan Slerp
Tidak seperti (yang menginterpolasi secara linear antara dua nilai), Mathf.Lerp
menginterpolasi sepanjang laluan terpendek antara dua putaran. Ini penting untuk putaran untuk mengelakkan terbalik atau bergoncang secara tidak sengaja. Quaternion.Slerp
Bagaimana untuk melaksanakannya
Putaran mengikut masa
Untuk memutar objek secara beransur-ansur ke arah putaran tertentu, anda boleh menggunakan kod berikut:
<code class="language-C#">void Start() { Quaternion rotation2 = Quaternion.Euler(new Vector3(0, 0, 90)); StartCoroutine(RotateObject(objectToRotate, rotation2, 3f)); } IEnumerator RotateObject(GameObject gameObjectToMove, Quaternion newRot, float duration) { Quaternion currentRot = gameObjectToMove.transform.rotation; float counter = 0; while (counter < duration) { counter += Time.deltaTime; gameObjectToMove.transform.rotation = Quaternion.Slerp(currentRot, newRot, counter / duration); yield return null; } }</code>
Putaran sudut tambahan
Untuk hanya memutar objek mengikut sudut tertentu, gunakan kod ini:
<code class="language-C#">void Start() { StartCoroutine(RotateObject(objectToRotate, new Vector3(0, 0, 90), 3f)); } IEnumerator RotateObject(GameObject gameObjectToMove, Vector3 eulerAngles, float duration) { Vector3 newRot = gameObjectToMove.transform.eulerAngles + eulerAngles; Vector3 currentRot = gameObjectToMove.transform.eulerAngles; float counter = 0; while (counter < duration) { counter += Time.deltaTime; gameObjectToMove.transform.eulerAngles = Vector3.Slerp(currentRot, newRot, counter / duration); yield return null; } }</code>
Ringkasan
Menyediakan penyelesaian yang boleh dipercayai untuk transformasi putaran yang lancar dan cekap dalam enjin Unity. Dengan memahami asasnya dan melaksanakan coretan kod yang disediakan, anda boleh mengawal masa putaran objek permainan anda dengan berkesan, mewujudkan pengalaman permainan yang dinamik dan menarik untuk pemain anda. Quaternion.Slerp
Atas ialah kandungan terperinci Bagaimanakah Quaternion.Slerp Mendayakan Putaran Bertambah Lancar dalam Perpaduan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!