Menu
CoddyTech

İ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.

challenge icon

Görev

Orta

Bu 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);
    }
}
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