Menu
CoddyTech

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.

challenge icon

Görev

Orta

Kameranı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.

  1. float angle; alanını ekle ve Update() işlevinin ilk iki satırını angle += direction * speed * Time.deltaTime; ile değiştir.
  2. İki if satı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

Kendi başına pratik yap: Unity playground