Menu
CoddyTech

Yörünge Kamerası

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

Bir noktanın çevresinde dönmek için bir açıyı sakla, sabit bir ofseti bu açı kadar döndür ve sonucu noktaya ekle. Döndürme ile vektör çarpımı dönüşü sağlar: Quaternion.Euler(0, angle, 0) * offset, ofseti y ekseni çevresinde döndürür; uzunluğu ve yüksekliği aynı kalır. Bu kamera, bir heykelin çevresinde saniyede 20 derece döner; her zaman 3 birim yukarıda ve 6 birim uzakta kalır:

public Transform statue;
public float speed = 20f;
float angle;

void LateUpdate()
{
    angle += speed * Time.deltaTime;
    Vector3 offset = new Vector3(0, 3, -6);
    transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
    transform.LookAt(statue);
}

Açı 0 olduğunda ofset (0, 3, -6) olur; dolayısıyla kamera heykelin arkasındadır. Açı 90 olduğunda (-6, 3, 0) olur ve heykelin -x tarafındadır; 180 olduğunda ise (0, 3, 6) olur ve önündedir. Kamerayı hareket ettirmek onu döndürmez; bu nedenle LookAt, kamerayı her yeni konumdan tekrar heykele yöneltir.

İkinci bir açı kamerayı yükseltir: Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance), arkaya doğru olan yönü pitch kadar yukarı döndürür (x çevresindeki pozitif bir dönüş (0, 0, -1) vektörünü yukarı eğer), ardından yaw kadar kendi çevresinde döndürür; böylece kamera her açıda distance kadar uzakta kalır.

Euler Açılarında olduğu gibi açı, kendi alanında tutulur: sıçrama olmadan 360'ı aşabilir veya 0'ın altına düşebilir; ayrıca açıyı sınırlandırabilir ya da klavyeden değiştirebilirsin. Bunu LateUpdate() içinde yapmak, kamerayı o karede heykel veya oyuncu hareket ettikten sonra konumlandırır.

challenge icon

Görev

Orta

Oyuncunun kamerayı kulenin etrafında uçurmasını sağla.

  1. Update() içinde, sağ ve sol ok tuşları yaw değerini turnSpeed hızında, yukarı ve aşağı ok tuşları ise pitch değerini tiltSpeed hızında değiştirir; bu hızlar Time.deltaTime ile çarpılır.
  2. Ardından pitch = Mathf.Clamp(pitch, 10f, 60f); satırını koru.
  3. LateUpdate() içinde, transform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance); satırını ayarla, ardından transform.LookAt(target); satırını ekle.

“Oyna” düğmesine bas ve kulenin etrafında uç. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class OrbitCamera : MonoBehaviour
{
    public Transform target;
    public float distance = 8f;
    public float turnSpeed = 90f;
    public float tiltSpeed = 45f;
    public float yaw = 0f;
    public float pitch = 30f;

    void Update()
    {
        // Ok tuşları yaw ve pitch değerlerini değiştirir.
    }

    void LateUpdate()
    {
        // Kamerayı target etrafına yerleştir ve ona bakmasını sağla.
    }
}

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

Kendi başına pratik yap: Unity playground