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.
Görev
OrtaDirekteki 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;
}
}
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
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 Duvar