Yönü, doğrultusu ve uzunluğu olan yönlü doğru parçasına vektör denir. Vektörün bir başlangıç ve bitiş noktası vardır. Unity size oyunlarınızı tasarlarken vektörel yapı sunar. Analitik geometride hipotenüs bir vektördür. Unity programında vektörlere geçmeden matematikteki vektörler konusunu çok iyi bilmemiz gerekir.
Aşağıda iki boyutlu uzayda A(4, 3) noktasına ait vektörel çizimi yapalım. Unity programında cisimlerin birbirlerine olan uzalıkları burada hipotenüs aracılığıla bulabiliriz.

A noktasından x ve y düzlemlerine dikmeler indirilir, elde edilen üçgende hipotenüs A noktasının orijine olan uzaklığını bulur. Vektörel uzunluklar her zaman orijine göre hesaplanmazlar. Örneğin A(4, 1) ve B(7, 5) noktaları arasındaki vektörel uzunluğu bulmak isteyelim. Aslında A noktasına X vektör uzunluğu ilave edilerek B noktası bulunmaktadır. Buna göre X vektörü B-A vektörünün kareköküne eşittir.
Şimdi de 3 boyutlu uzayda vektörel uzunlukları bulmaya çalışalım. Üç boyutlu uzay sol el kuralına göre gösterilir. Baş parmak x, işaret parmağı y, orta parmak z eksenini gösterilir. Tüm 3 boyutlu programlarda x kırmızı, y yeşil, z ise mavi renkle temsil edilirler. Bir A vektörünü (12, 0, 5) olarak belirleyelim. Bu noktayı aşağıdaki düzlemde gösterelim.

Burada A noktasını belirledikten sonra, noktanın orijine olan uzaklığını bulabiliriz. Bir başka nokta belirleyelim. B(5, 2, 4) noktasını belirleyelim. Vektörel uzunluğu bulmak için uzunlukların kareleri toplamının karekökü alınır. Şimdi unity programında nesnelerin vektörel uzunlukları nasıl bulunuyor, bunları inceleyelim.
Unity Hub programını açalım.
Yeni bir boş 3D proje oluşturalım. Projenin adını VektorelUzunluk olarak belirleyelim.
Sahneye ismi VektorelHesap olan boş bir nesne ekleyelim.
Assets klasörüne Scripts isimli bir klasör ekleyelim.
Bu klasörün içine Hesaplama isminde bir script dosyası ekleyelim.
Bu dosyayı boş nesneyle ilişkilendirelim.
Script dosyasını açalım. Start ve Update fonksiyonlarını silelim. Öncelikle vektörün başlangıç noktasına olan uzaklığını bulan uygulamayı yapalım. Yukarıda verilen örnekte A(5, 0, 12) vektörünün uzunluğunu 13 olarak bulmuştuk.
Kodlama işlemine geçelim. Öncelikle bu işlemi gerçekleştirecek komutu açıklayalım.
Magnitude
Vektörün başlangış noktasına olan uzazklığını bulur.
Öncelikle değişkenin ismini belirleyelim. Ben burada değişken ismi olarak A diyeceğim. Değişkenimizin türü vektör olacaktır. Bir noktanın vektör olabilmesi için x, y ve z değerlerinin bilinmesi gerekir. Bu değerleri sabit olarak tanımlayabileceğimiz gibi sürekli değiştirebiliriz. Ben her iki yöntemi de göstereceğim.
Sabit tanımlayarak işlemi yapma
Bu tip kodlamada hangi değeri verirsek program hep o değerleri dikkate alarak sonuç üretir. Sadece bir değer üretimi söz konusudur. Şimdi değişkenimizi tanımlayalım.
private Vector3 A;
Vektörel uzunluğa ait sonucu saklamak için float tipinde bir sonuc değişkeni tanımlayalım.
private Vector3 A;
float sonuc = 0.0f;
Kodu yazdıktan sonra mutlaka kaydedelim. Değer girişi ve sonucu görüntülemek için Start metodunu yazalım.
private Vector3 A;
float sonuc;
private void Start()
{
}
A noktasının değerlerini belirleyelim.
private Vector3 A;
float sonuc;
private void Start()
{
A.x = 5;
A.y = 0;
A.z = 12;
}
Noktanın kameraya olan uzaklığını bulup sonuc değişkenine aktaralım.
private Vector3 A;
float sonuc;
private void Start()
{
A.x = 5;
A.y = 0;
A.z = 12;
sonuc = Vector3.Magnitude(A);
}
Sonucu print deyimiyle görüntüleyelim.
private Vector3 A;
float sonuc;
private void Start()
{
A.x = 5;
A.y = 0;
A.z = 12;
sonuc = Vector3.Magnitude(A);
print(sonuc);
}
Script dosyasını kaydedelim. Unity tarafına geçelim. Burada Console panelini açalım. Daha sonra uygulamayı çalıştıralım. Vektörün uzunluğu 13 olarak bulunur. A noktasının değerlerini script dosyasına gidip değiştirmedikçe hep aynı sonucu alırsınız.
Şimdi işlemi dinamik olarak tasarlayalım. Böylece değer girişini her yaptığınızda sonucun değiştiğini görürsünüz. Bu işlemi iki türlü yapabilirsiniz. Birincisinde yukarıda verilen kodu değiştirmeden şu ilaveleri yaparak statik ortamı dinamik hale getirebilirsiniz.
[Header("A Vektörüne Ait Noktalar")]
[SerializeField]
private Vector3 A;
float sonuc;
private void Start()
{
sonuc = Vector3.Magnitude(A);
print(sonuc);
}
Burada eklediğimiz iki deyimi açıklayalım. Header deyimiyle Inspector paneline eklenen özelliklere başlık eklemiş oluyoruz. SerializeField deyimi ise, statik olarak tanımlı bir değişkenin dinamik olarak kullanılmasına izin verir.
Şimdi diğer yöntemi anlatalım. Bu yöntemde SerializeField deyimine gerek kalmadan değişken bildirisini private yerine public olarak tanımlayabiliriz. Hadi şimdi onu yapalım.
[Header("A Vektörüne Ait Noktalar")]
public Vector3 A;
float sonuc;
private void Start()
{
sonuc = Vector3.Magnitude(A);
print(sonuc);
}
Projeyi kaydedip çalıştıralım. A vektörüne ait noktaları her değiştirdiğimizde sonucu farklı olarak görmekteyiz. Peki, iki vektörün kendi aralarındaki uzaklığı nasıl bulabiliriz. Şimdi bu işlemi gerçekleştirelim. Öncelikle bu işlemi gerçekleştiren deyimi tanımlayalım.
Distance
İki vektör arasındaki uzaklığı bulur.
Script dosyasına geri dönelim. Aşağıdaki değişiklikleri yapalım.
[Header("Vektörlere Ait Noktalar")]
public Vector3 A;
public Vector3 B;
float sonuc;
private void Start()
{
sonuc = Vector3.Distance(A, B);
print(sonuc);
}