İleriyi Görme
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 47 / 63.
Hareket eden bir hedefe doğrultulmuş kamera, hedefin gittiği yeri olduğu kadar geldiği yeri de gösterir. Bunun yerine biraz ilerideki bir noktaya doğrultun: hedefin konumu artı saniye cinsinden öngörü süresiyle çarpılmış hızı. Yarış pistinin yanındaki bir sehpa üzerinde bulunan bu kamera, arabayı takip etmek için döner ve yarım saniye ilerisine doğrultulur:
public Rigidbody car;
public float lead = 0.5f;
void LateUpdate()
{
Vector3 aim = car.position + car.linearVelocity * lead;
transform.LookAt(aim);
}Saniyede 20 birim hızla nişan noktası arabanın 10 birim önündedir; saniyede 4 birim hızla 2 birim önündedir ve duran bir araba doğrudan hedef alınır. Hız, arabanın gerçek hareketidir; dolayısıyla kayarken veya geri giderken nokta doğru yerde olur. transform.forward bunu sağlamaz: geri giden bir arabanın önü gittiği yönün tersini gösterir, yuvarlanan bir topun önü ise onunla birlikte döner.
Takip kamerası da ileriyi gösterebilir: hedefin kendisi yerine hedefinin önündeki bir noktayı kadraja alır. Bu nokta, oyuncu döndüğünde olduğu gibi, diğer tarafa geçebiliyorsa, her karede öngörü miktarını biraz değiştirin; yoksa tüm görüntü bir anda sıçrar.
Görev
OrtaBu yandan görünüm, x ekseni boyunca koşucuyu takip eder (oklar onu sağa ve sola hareket ettirir). Kameranın koşucunun gittiği yönün daha fazlasını göstermesini sağla:
- Kamera, koşucunun x ekseninde önünde ve koşucunun en son hareket ettiği tarafta
ahead(3) birim uzaklıkta durur. Koşucu ilk kez hareket etmeden önce kamera onu ortalar. - Koşucu yönünü değiştirdiğinde, öndeki mesafe aniden diğer tarafa atlamak yerine saniyede
shiftSpeed(4) birim hızla diğer tarafa kayar. - Koşucu durduğunda kamera öndeki mesafesini korur.
- Kameranın y ve z değerleri değişmeden kalır.
Play'e bas, iki yöne de koş, ardından Check'e bas.
Kendin dene
using UnityEngine;
public class LookAheadCamera : MonoBehaviour
{
public Transform player;
public float ahead = 3f;
public float shiftSpeed = 4f;
void LateUpdate()
{
// Oyuncunun son hareket ettiği yönde ahead birim önünde konumlan, shiftSpeed hızıyla kayarak ilerle.
transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
}
}
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