Menu
CoddyTech

Sudut Euler

Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 40 dari 63.

transform.eulerAngles adalah rotasi sebuah object sebagai tiga sudut dalam derajat, mengelilingi x, y, dan z. Unity menyimpan rotasi sebagai quaternion (pelajaran berikutnya) dan menghitung kembali ketiga sudut setiap kali kamu membacanya, selalu sebagai nilai dari 0 hingga 360. Miringkan papan sebesar -10 derajat mengelilingi z, lalu baca nilainya kembali:

transform.rotation = Quaternion.Euler(0, 0, -10);
Debug.Log(transform.eulerAngles.z);   // 350

Kamu menetapkan -10, tetapi kode membaca 350, jadi if (transform.eulerAngles.z < -5) tidak pernah bernilai true. Membaca nilainya kembali dapat mengubah ketiga angka: tetapkan (100, 0, 0), lalu kamu membaca (80, 180, 180), orientasi yang sama dengan cara penulisan lain. Quaternion.Euler(x, y, z) bekerja sebaliknya dan menerima sudut apa pun: -10, 350, dan 710 menghasilkan rotasi yang sama. Jadi, simpan sudut dalam float milikmu sendiri, ubah dan batasi nilainya di sana, lalu tetapkan seluruh rotasi berdasarkan nilai tersebut. Papan jungkat-jungkit ini miring mengikuti tombol panah dan berhenti pada 20 derajat ke kedua arah:

public float speed = 40f;
float tilt;

void Update()
{
    tilt += Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
    tilt = Mathf.Clamp(tilt, -20f, 20f);
    transform.rotation = Quaternion.Euler(0, 0, tilt);
}

Jangan ubah satu bagian dari sudut yang kamu baca. transform.eulerAngles.x = 110; tidak dapat dikompilasi (CS1612, sama seperti position.x), dan menyalin eulerAngles, mengubah x, lalu menetapkan kembali salinannya akan menggunakan sudut versi Unity sebagai titik awal. Setelah menetapkan (100, 0, 0), salinannya adalah (80, 180, 180). Tambahkan 10 ke x, maka hasilnya (90, 180, 180), yang memutar object kembali ke 90, bukan terus ke 110.

challenge icon

Tantangan

Sedang

Kamera keamanan di tiang seharusnya terus menyapu dari sisi ke sisi: dari menghadap ke depan (0 derajat pada sumbu y), kamera berputar ke kanan, nilai y bertambah, dengan kecepatan speed (30) derajat per detik, berbalik saat mencapai limit (45), menyapu melintasi hingga -limit (-45), berbalik lagi, dan seterusnya. Sepanjang waktu, kamera mempertahankan kemiringan ke bawah sebesar tilt (20) derajat pada sumbu x.

Tekan Play: kode awal berbalik saat mencapai 45, tetapi saat mencapai -45 kamera terus berputar. Cari tahu penyebabnya dan perbaiki skripnya, lalu tekan Check.

Coba sendiri

using UnityEngine;

public class Sweep : MonoBehaviour
{
    public float speed = 30f;
    public float limit = 45f;
    public float tilt = 20f;   // derajat ke bawah, mengelilingi x
    float direction = 1f;

    void Update()
    {
        transform.Rotate(0, direction * speed * Time.deltaTime, 0, Space.World);
        float angle = transform.eulerAngles.y;
        if (angle > limit) direction = -1f;
        if (angle < -limit) direction = 1f;
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Fisika dan Gameplay