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); // 350Kamu 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.
Tantangan
SedangPerbaiki gerakan sapuan kamera: kamera berbalik arah saat mencapai 45, tetapi tidak saat mencapai -45, karena eulerAngles.y membaca -45 sebagai 315.
- Tambahkan field
float angle;dan ganti dua baris pertamaUpdate()denganangle += direction * speed * Time.deltaTime;. - 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
1Rigidbody
Gravitasi dan MassaDorong dengan AddForceMelompat dengan ImpulsFixedUpdate untuk FisikaKecepatanBenda KinematikRingkasan: Landasan Peluncur4Coroutine
InvokeInvokeRepeating, CancelInvokeCoroutine PertamamuPerulangan dalam CoroutineMenghentikan CoroutineRangkuman: Hitung Mundur10Proyek: Kabur dari Arena
ArenaPara Pemburu2Tabrakan
OnCollisionEnterApa yang Kutabrak?Pecah Saat BenturanBerdiri di Atas TanahPantulan dan GesekanBentuk ColliderRangkuman: Dinding yang Bisa HancurLatihan sendiri: Playground Unity