Vektör normalize etmek ne demektir? Çapraz harekette neden gereklidir?
Cevap
Bir vektörü normalize etmek, yönünü koruyup uzunluğunu (magnitude) 1 yapmaktır: her bileşen vektörün uzunluğuna bölünür. Sonuç birim vektördür ve sadece yönü temsil eder.
Vector3 v = new Vector3(3, 0, 4);
float length = v.magnitude; // sqrt(9 + 16) = 5
Vector3 dir = v.normalized; // (0.6, 0, 0.8), uzunluk 1Çapraz hareket problemi
W ve D tuşlarına aynı anda basılınca girdi (1, 0, 1) olur. Bu vektörün uzunluğu √2 ≈ 1.41'dir; yani karakter çapraz giderken %41 daha hızlı hareket eder.
Vector3 input = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
// Basit çözüm
Vector3 move = input.normalized * speed;
// Analog çubukta yavaş yürümeyi koruyan çözüm
Vector3 move2 = Vector3.ClampMagnitude(input, 1f) * speed;normalized analog çubuktaki yarım basışı da 1'e çıkarır; bu yüzden gamepad desteği varsa ClampMagnitude daha doğrudur.
Diğer kullanım alanları
- Bir nesneden diğerine yön:
(target - transform.position).normalized - Dot product ile açı kontrolü yaparken iki vektör de normalize olmalıdır.
- Sıfır vektör normalize edilemez (sıfıra bölme); Unity bu durumda
Vector3.zerodöndürür. - Sadece mesafe karşılaştırması yapılacaksa karekök maliyetinden kaçmak için
sqrMagnitudekullanılır.
İ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?
- Lerp ve Slerp nedir? Lerp'ü Update içinde yanlış kullanmak neden sorun yaratır?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.