Unıty Lerp Nedir ?

Sosyal medyada paylaşın

Lerp fonksiyonu birden fazla sınıfta kullanılır, bunlara örnek Mathf ve Vector sınıflarıdır. Lerp static fonksiyonu iki nokta arasında doğrusal enterpolasyon yapar. Vector3.Lerp(a, b, t) a başlangıç pozisyonu, b bitiş pozisyonu ve son olarak t parametresi ise a ve b arasında enterpolasyon yapmak için kullanılan değerdir. Fonksiyonun temelinde yatan matematik formülü a + (b – a) * t şeklindedir. İki nokta arasında verdiğiniz t parametresine göre hareket eder ve size istediğiniz noktayı döndürür. T parametresi 0 ile 1 arasında değer almakla sınırlandırılmıştır.

Nerelerde kullanıldığına gelirsek, animasyonlarda, renk geçişlerinde veya kamera-oyuncu yumuşak hareketinde kullanılabilir.

Şimdi kod örneklerine bakalım.

public float elapsed;

void Update()
    {
        float t = elapsedTime;

        target1.position = Vector3.Lerp(start.position, end.position, t);
      
        elapsedTime+= Time.deltaTime;
        if (elapsedTime>= 1) elapsedTime= 0;
    }

Target1 adlı transform’un pozisyonunu gördüğünüz gibi start ve end pozisyonları arasında enterpolasyona uğratıyoruz. Burda özellikle bahsetmek istediğim konu ise t parametresi, t adında bir float değişken tanımlıyoruz ve bunu update her bittiğinde time.deltaTime ile topluyoruz eğer geçen süre 1’den büyük olursa sıfıra eşitleyip iki nokta arasındaki hareketi yeniden başlatıyoruz. Yazının başlarında t parametresinin [0,1] aralığında olduğundan bahsetmiştim buradaki amacımız aralığın tekrar etmesidir. Her frame’de t parametresi artıyor ve sonraki frame başlangıcında enterpolasyonun parametresi oluyor bu şekilde iki nokta arasındaki diğer noktayı elde edebiliyoruz.

Buraya kadar anladığınızı düşünüyorum, peki şimdi 3 nokta arasında eğri hareketi yapsak nasıl olur ? 🙂 Hemen inceleyelim.

3 adet noktamız olacak ve Start-Middle, Middle-End olmak üzere bu noktalar arasında 2 farklı enterpolasyon yapacağız. Elde ettiğimiz iki farklı enterpolasyonun sonucunu farklı iki noktaya veriyoruz, peki ya target1 ve target2 arasında bir enterpolasyon yapsak ve sonucunu farklı bir noktaya versek ne mi olur? Alın size eğri hareketi 🙂 Ortadaki target3 adlı küpün pozisyonu her zaman target1 ve target2’nin doğrusal enterpolasyonuna eşit olacaktır. Bu şekilde nokta sayısını artırarak farklı türde eğri hareketi işlemi yapabilirsiniz


    public float elapsed;

    void Update()
    {
        float t = elapsed;

        target1.position = Vector3.Lerp(start.position, middle.position, t);
        target2.position = Vector3.Lerp(middle.position, end.position, t);
        target3.position = Vector3.Lerp(target1.position, target2.position, t);

        elapsed += Time.deltaTime;
        if (elapsed >= 1) elapsed = 0;
    }

Umarım anlatabilmişimdir faydalı olması dileğiyle….