UNITY Quaternion Üzerine

Lanet corona virüsünün ülkemizde sebep olduğu tatilin 4. gününden herkese merhaba.

Üzerinde çalışmakta olduğum projede bizim yaramaz tilkimiz mobile joystick ve ekrana dokunarak kontrol edilecek tıpkı PUBG oyununun kontrollerinde olduğu gibi.

Bu kontrolleri yaklaşık bir iki saat içerisinde kodlamayı bitirdiğimde Quaternionu ne kadar fazla kullandığımı farkettim. Uzun süredir Unity de oyun geliştirmekle uğraşmama rağmen ilk defa Quaternionu farketmiş olmamın iki sebebi var.

Birincisi şimdiye kadar FPS – TPS tarzı bir oyun kodlamamış olmam sanırım. Yön kavramının çok sınırlı olduğu basit projelerde çalıştığım için Quaternionu az kullanmış ve nelere kadir olduğunun farkına varmamışım.

İkincisi ise ilk defa mobile joystick olayını assets store dan hazır indirip kullanmak yerine nispeten büyük bir kısmını kendim kodluyor oluşum.

Neyse gelelim konumuza.. Quaternion Nedir? Quaternion UNITY de yönlendirme (rotation) yani dönme olaylarını veya açıları temsil ediyor diyebiliriz. Kendi başına yapıcı bir sınıf olan Quaternionun bir çok metodu bulunmaktadır. Bu metodlardan en çok kullanılanları açıklamaya çalışayım.

Quaternion.Angle(Quaternion a, Quaternion b) : Kullanılış biçiminden de anlaşılacağı üzere parametre olarak iki adet Quaternion(Yön- Açı) alan Angle fonksiyonu bu iki açı arasındaki mesafeyi yine açı cinsinden bize vermektedir. Kısaca iki yön arasındaki açısal fark.

Quaternion.AngleAxis(float açı, Vector3 eksen) : AngleAxis fonksiyonu yine iki parametre alıyor. Birinci parametremiz float türünden bir değişken olan açı değeri olacak. İkinci parametremiz ise Vector3 türünden bir eksen. Bir doğru olarak düşünebilirsiniz. Bu fonksiyon eksen olarak atadığımız vektör etrafında açı değişkeni ile belirlediğimiz miktarda cismin dönmesini sağlıyor. Örneğin Quaternion.AngleAxis( 90f , Vector3.up ); şeklinde bir kullanımda unityde tanımlı Vector3.up vektörü dikey olan y ekseni olduğu için y ekseni etrafında 90 derece dönme işlemini yapacaktır. Bir karakterin sağa sola dönmesi bu şekilde sağlanabilir.

Quaternion.LookRotation(Vector3 bakan, Vector3 bakılan) : LookRotation fonksiyonu bir objenin yönünün diğerine çevrilmesi olarak düşünülebilir. İçerisine aldığı parametreleri daha iyi anlaşılsın diye bakan ve bakılan şeklinde yazdım. Yani ilk parametremiz bakan nesnenin yani dönecek olan nesnesin Vector3 olarak doğrultusu, mesela önü yani Vector3.forward, ikincisi ise bakılan olan nesnenin Vector3 olarak yeri diyebiliz. Örneğin bir projenizde düşmanların oyuncuya veya kameraya bakmasını kolayca bu şekilde sağlayabilirsiniz.

Quaternion.Euler(Vector3 a) : Tek parametre alan Euler fonksiyonu direk karakterin rotationunu istenilen yöne ayarlamak için kullanılıyor.

Quaternion.Slerp(Quaternion a, Quaternion b , float t ) : Slerp fonksiyonu bir açıdan başka bir açıya belirli bir süre içerisinde yumuşak bir şekilde dönmeyi sağlıyor. İlk parametremiz a ilk açımız, ikinci parametremiz b kaç derece döneceği, üçüncü parametremiz t ise nekadar adımlarla döneceğini belirliyor. t sayısı 0 ile 1 arasında float bir değer alıyor. Örneğin 0.1 dediğinizde 0.1 adımlarla biraz daha yavaş, smooth bir dönüş yaparken 0.9 dediğinizde daha hızlı bir dönüş yapıyor. İnşallah anlatabilmişimdir 😀

Quaternion.FromToRotation(Vector3 a, Vector3 b) : Adından da anlaşılacağı üzere FromToRotation fonksiyonu a vektöründen b vektörüne bir dönüş gerçekleştirecektir.

Quaternion yapıcı sınıfının bir bu kadar daha anlatmadığım fonksiyonu mevcut. Doğrusunu konuşmak gerekirse içlerinde şimdiye kadar hiç kullanmadıklarım da var. Bunları merak edenler için Unity nin kendi dökümantasyonunun adresi : https://docs.unity3d.com/ScriptReference/Quaternion.html

Herkese iyi çalışmalar.

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir