Euler Açıları
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 42 / 71.
transform.eulerAngles, bir nesnenin x, y ve z eksenleri etrafındaki dönüşünü derece cinsinden üç açıyla ifade eder. Unity, dönüşü bir kuaterniyon olarak saklar (bir sonraki ders) ve bu üç açıyı her okuduğunuzda yeniden hesaplar; değerler her zaman 0 ile 360 arasındadır. Bir tahtayı z ekseni etrafında -10 derece eğip değerini tekrar okuyun:
transform.rotation = Quaternion.Euler(0, 0, -10);
Debug.Log(transform.eulerAngles.z); // 350-10 değerini ayarladınız, ancak kod 350 değerini okuyor; dolayısıyla if (transform.eulerAngles.z < -5) hiçbir zaman doğru olmaz. Değeri tekrar okumak üç sayının tamamını değiştirebilir: (100, 0, 0) değerini ayarladığınızda, aynı yönelimi farklı biçimde ifade eden (80, 180, 180) değerini okursunuz. Quaternion.Euler(x, y, z) ters yönde çalışır ve herhangi bir açıyı kabul eder: -10, 350 ve 710 aynı dönüşü oluşturur. Bu yüzden açıyı kendi float değişkeninizde tutun, orada değiştirip sınırlandırın ve dönüşün tamamını bu açıdan ayarlayın. Bu tahterevalli ok tuşlarıyla eğilir ve her iki yönde de 20 derecede durur:
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);
}Okuduğunuz açıların bir bölümünü değiştirmeyin. transform.eulerAngles.x = 110; derlenmez (CS1612; position.x için de aynı durum geçerlidir) ve eulerAngles değerini kopyalayıp x değerini değiştirdikten sonra kopyayı geri atamak, Unity'nin açı değerlerinden yola çıkar. (100, 0, 0) değerini ayarladıktan sonra bu kopya (80, 180, 180) olur; x değerine 10 eklediğinizde (90, 180, 180) elde edersiniz ve nesneyi 110'a değil, tekrar 90'a döndürürsünüz.
Görev
OrtaKameranın taramasını düzelt: 45'te geri dönüyor ama -45'te dönmüyor, çünkü eulerAngles.y -45 değerini 315 olarak okuyor.
float angle;alanını ekle veUpdate()işlevinin ilk iki satırınıangle += direction * speed * Time.deltaTime;ile değiştir.- İki
ifsatırını koru, ardından dönüşün tamamını ayarla:transform.rotation = Quaternion.Euler(tilt, angle, 0);.
“Oyna” düğmesine bas: kamera aşağı eğik şekilde 45'ten -45'e, ardından tekrar geri tarama yapar. Sonra “Kontrol et” düğmesine bas.
Kendin dene
using UnityEngine;
public class Sweep : MonoBehaviour
{
public float speed = 30f;
public float limit = 45f;
public float tilt = 20f; // x ekseni etrafında aşağı doğru derece cinsinden
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;
}
}
Fizik ve Oynanış bölümündeki tüm dersler
1Rigidbody
Yerçekimi ve KütleAddForce ile İtmeDürtüyle ZıplamaFizik için FixedUpdateHızKinematik CisimlerTekrar: Fırlatma Rampası2Çarpışmalar
OnCollisionEnterNeye Çarptım?Çarpınca KırılYerde DurmakSekme ve SürtünmeCollider ŞekilleriTekrar: Kırılabilir DuvarKendi başına pratik yap: Unity playground