Lerp ve Slerp nedir? Lerp'ü Update içinde yanlış kullanmak neden sorun yaratır?

Cevap

Lerp (Linear Interpolation), iki değer arasında t oranında doğrusal ara değer üretir:

Lerp(a, b, t) = a + (b - a) * t (t = 0 → a, t = 1 → b)

Slerp (Spherical Linear Interpolation), iki yön veya rotasyon arasında küre yüzeyi boyunca sabit açısal hızla ara değer üretir. Rotasyonlar için Quaternion.Slerp kullanılır; Lerp rotasyonlarda ara noktalarda hız değişimine ve kısalmış vektörlere yol açar.

// Doğru kullanım: sabit sürede A'dan B'ye
IEnumerator MoveOverTime(Vector3 from, Vector3 to, float duration)
{
    float elapsed = 0f;
    while (elapsed < duration)
    {
        elapsed += Time.deltaTime;
        float t = Mathf.Clamp01(elapsed / duration);
        transform.position = Vector3.Lerp(from, to, t);
        yield return null;
    }
}

Yaygın yanlış kullanım

void Update()
{
    transform.position = Vector3.Lerp(transform.position, target, 0.1f);
}

Bu kod her kare kalan mesafenin %10'unu gider. Sorunları:

  • Frame rate bağımlıdır: 144 FPS'te 30 FPS'ten çok daha hızlı yaklaşır.
  • Hedefe asla tam ulaşmaz (asimptotik).

Bu "yumuşak takip" efekti isteniyorsa frame rate bağımsız hâli kullanılmalıdır:

float k = 1f - Mathf.Exp(-sharpness * Time.deltaTime);
transform.position = Vector3.Lerp(transform.position, target, k);

Alternatif olarak Vector3.SmoothDamp veya sabit hız için Vector3.MoveTowards tercih edilir.

  1. Vektörlerde dot product ve cross product oyunlarda ne için kullanılır?OrtaOyun MatematiğiGame Dev
  2. AABB ve sphere çarpışma testleri matematiksel olarak nasıl yapılır? Hangisi ne zaman tercih edilir?OrtaOyun MatematiğiGame Dev
  3. Transform matrisleri nedir? Local space ile world space arasında nasıl dönüşüm yapılır?OrtaOyun MatematiğiGame Dev
  4. Quaternion ile Euler açıları arasındaki fark nedir? Gimbal lock nedir?ZorOyun MatematiğiGame Dev
  5. Vektör normalize etmek ne demektir? Çapraz harekette neden gereklidir?KolayOyun MatematiğiGame Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle