Kelas Penting - Vektor
Login Sitemap

Kelas Penting - Quaternion

Switch to Scripting

Unity menggunakan kelas QuaternionCara standar Unity mewakili rotasi sebagai data. Ketika menulis kode yang berhubungan dengan rotasi, Anda biasanya harus menggunakan kelas Quaternion dan metodenya. More info
Lihat di Glossary
untuk menyimpan orientasi tiga dimensi GameObjectsObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary
, serta menggunakannya untuk menggambarkan rotasi relatif dari satu orientasi ke yang lain.

Halaman ini menyediakan ikhtisar dari kelas Quaternion dan kegunaannya yang umum ketika scripting dengan itu. Untuk referensi knalpot dari setiap anggota kelas Quaternion, lihat Referensi skrip Quaternion.

Penting untuk memahami perbedaan antara sudut Euler (X, Y, & Z nilai yang Anda lihat dalam inspektur untuk rotasi GameObject), dan nilai Quaternion yang mendasari yang digunakan Unity untuk menyimpan rotasi sebenarnya dari GameObjects. Untuk dasar-dasar topik ini, baca Rotasi dan Orientasi dalam Unity.

Ketika menangani rotasi dalam scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary
Anda, Anda harus menggunakan kelas Quaternion dan fungsinya untuk membuat dan memodifikasi nilai rotasi. Ada beberapa situasi di mana hal ini berlaku untuk menggunakan sudut Euler, tetapi Anda harus ingat: - Anda harus menggunakan fungsi Kelas Quaternion yang menangani sudut Euler - Retrieving, memodifikasi, dan mengubah nilai Euler dari rotasi dapat menyebabkan efek samping tidak sengaja (lihat di bawah)

Membuat dan memanipulasi quaternions langsung

Kelas Quaternion Unity memiliki sejumlah fungsi yang memungkinkan Anda untuk membuat dan memanipulasi rotasi tanpa perlu menggunakan sudut Euler sama sekali, dan ini adalah yang harus Anda gunakan dalam kasus yang paling khas. Setiap tautan ini ke Referensi Script dengan sampel kode:

Membuat Rotasi:

Manipulasi Rotasi:

Kelas Transform juga menyediakan metode yang memungkinkan Anda untuk bekerja dengan rotasi Quaternion:

Bekerja dengan sudut Euler

Dalam beberapa kasus lebih diinginkan untuk menggunakan sudut Euler di skrip Anda. Ketika melakukannya, penting untuk dicatat bahwa Anda harus menjaga sudut Anda dalam variabel, dan hanya menggunakannya untuk apply mereka sebagai sudut Euler untuk rotasi Anda, yang masih harus disimpan sebagai peng Quaternion. Meskipun dimungkinkan untuk mengambil sudut Euler from a quaternion, jika Anda mengambil, memodifikasi dan menerapkan kembali, masalah kemungkinan timbul.

Anda dapat membaca lebih detail tentang bagaimana masalah ini dapat muncul di Login Halaman referensi script sudut.

Berikut adalah beberapa contoh mistakes yang biasa dibuat menggunakan contoh hipotesis mencoba untuk memutar GameObject sekitar sumbu X pada 10 derajat per detik. Ini adalah apa yang harus Anda avoid:

// rotation scripting mistake #1
// the mistake here is that we are modifying the x value of a quaternion
// this value does not represent an angle, and does not produce desired results
    
void Update () 
{
    var rot = transform.rotation;
    rot.x += Time.deltaTime * 10;
    transform.rotation = rot;
}
// rotation scripting mistake #2
// Read, modify, then write the Euler values from a Quaternion.
// Because these values are calculated from a Quaternion,
// each new rotation might return very different Euler angles, which might suffer from gimbal lock.
        
void Update () 
{
    var angles = transform.rotation.eulerAngles;
    angles.x += Time.deltaTime * 10;
    transform.rotation = Quaternion.Euler(angles);
}

Dan di sini adalah contoh menggunakan sudut Euler di script correctly:

// Rotation scripting with Euler angles correctly.
// Store the Euler angle in a class variable, and only use it to
// apply it as an Euler angle, but never rely on reading the Euler back.
        
float x;
void Update () 
{
    x += Time.deltaTime * 10;
    transform.rotation = Quaternion.Euler(x,0,0);
}

Lihat Halaman referensi skrip Quaternion untuk informasi lebih lanjut.

Kelas Penting - Vektor
Login Sitemap