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.zero döndürür.
  • Sadece mesafe karşılaştırması yapılacaksa karekök maliyetinden kaçmak için sqrMagnitude kullanılır.
  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. Lerp ve Slerp nedir? Lerp'ü Update içinde yanlış kullanmak neden sorun yaratır?OrtaOyun 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