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.
Görev
OrtaOyuncunun kamerayı kulenin etrafında uçurmasını sağla.
Update()içinde, sağ ve sol ok tuşlarıyawdeğeriniturnSpeedhızında, yukarı ve aşağı ok tuşları isepitchdeğerinitiltSpeedhızında değiştirir; bu hızlarTime.deltaTimeile çarpılır.- Ardından
pitch = Mathf.Clamp(pitch, 10f, 60f);satırını koru. LateUpdate()içinde,transform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);satırını ayarla, ardındantransform.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
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