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.
İlgili Oyun Matematiği soruları
- Vektörlerde dot product ve cross product oyunlarda ne için kullanılır?
- AABB ve sphere çarpışma testleri matematiksel olarak nasıl yapılır? Hangisi ne zaman tercih edilir?
- Transform matrisleri nedir? Local space ile world space arasında nasıl dönüşüm yapılır?
- Quaternion ile Euler açıları arasındaki fark nedir? Gimbal lock nedir?
- Vektör normalize etmek ne demektir? Çapraz harekette neden gereklidir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.