Menu
CoddyTech

Euler Açıları

Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 40 / 63.

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 (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ğin ve değeri geri okuyun:

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

-10 ayarladınız, ancak kod 350 okuyor; bu yüzden if (transform.eulerAngles.z < -5) hiçbir zaman true olmaz. Değeri geri okuduğunuzda üç sayının tümü değişebilir: (100, 0, 0) ayarlarsanız (80, 180, 180) okursunuz; bu, aynı yönelimin başka bir gösterimidir. Quaternion.Euler(x, y, z) diğer 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 olduğu gibi) ve eulerAngles değerini kopyalayıp x'i değiştirdikten sonra kopyayı geri atamak, Unity'nin açı sürümünü temel alır. (100, 0, 0) ayarladıktan sonra kopya (80, 180, 180) olur; x'e 10 eklediğinizde (90, 180, 180) elde edersiniz ve nesneyi 110'a ilerletmek yerine tekrar 90 dereceye döndürürsünüz.

challenge icon

Görev

Orta

Direkteki güvenlik kamerası sağa sola düzgünce tarama yapmalı: öne bakarken (y etrafında 0 derece) sağa döner, y değeri speed (30) derece/saniye hızında artar, limit (45) değerinde geri döner, -limit (-45) değerine kadar tarar, tekrar geri döner ve böyle devam eder. Tüm süre boyunca x etrafında tilt (20) derecelik aşağı eğimini korur.

Play düğmesine bas: başlangıç betiği 45'te geri dönüyor, ancak -45'te dönmeye devam ediyor. Nedenini bul ve betiği düzelt, ardından Check 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;
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Fizik ve Oynanış bölümündeki tüm dersler