Menu
CoddyTech

Sudut Euler

Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 42 dari 71.

transform.eulerAngles adalah rotasi sebuah objek dalam tiga sudut dalam derajat, terhadap sumbu x, y, dan z. Unity menyimpan rotasi sebagai quaternion (di pelajaran berikutnya) dan menghitung kembali ketiga sudut setiap kali kamu membacanya, selalu sebagai nilai dari 0 hingga 360. Miringkan papan sebesar -10 derajat terhadap sumbu 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 penulisan berbeda. Quaternion.Euler(x, y, z) bekerja sebaliknya dan menerima sudut berapa 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 darinya. 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 di-compile (CS1612, seperti pada position.x), dan menyalin eulerAngles, mengubah x, lalu menetapkan kembali salinannya akan dimulai dari versi sudut milik Unity. Setelah menetapkan (100, 0, 0), salinan itu menjadi (80, 180, 180); tambahkan 10 ke x, lalu kamu mendapatkan (90, 180, 180), yang memutar objek kembali ke 90, bukan terus ke 110.

challenge icon

Tantangan

Sedang

Perbaiki gerakan sapuan kamera: kamera berbalik arah saat mencapai 45, tetapi tidak saat mencapai -45, karena eulerAngles.y membaca -45 sebagai 315.

  1. Tambahkan field float angle; dan ganti dua baris pertama Update() dengan angle += direction * speed * Time.deltaTime;.
  2. Pertahankan dua baris if, lalu atur seluruh rotasi: transform.rotation = Quaternion.Euler(tilt, angle, 0);.

Tekan tombol “Main”: kamera bergerak menyapu dari 45 ke -45 lalu kembali, dengan kemiringan ke bawah. Lalu tekan tombol “Periksa”.

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;
    }
}

Semua pelajaran di Fisika dan Gameplay

Latihan sendiri: Playground Unity