Unity Karakter Hareket Ettirmek İçin Yöntemler ve Farkları
Unity Karakter Hareket Sistemi Bütün Yöntemler
Merhaba arkadaşlar bu yazımda sizlere Unity de bulunan karakterleri ve nesneleri hareket ettirmenize sağlayan komutları anlatacağım.
Hangi komutu ne gibi durumlarda kullanmalıyız gibi bir kaç ufak detayını da anlatmaya çalışacağım, iyi okumalar.
Input Manager
Input Manager kullanıcının girdilerini bize veren algılama sistemidir, klavye, oyun kumandası gibi araçların hepsine teker teker kod yazarak algılamamız yerine Input Manager kullanarak daha kolay bir şekilde algılamamız bizim için daha verimlidir.
Input Manager her projeye otomatik olarak dahil olur ama üzerinde değişiklik yapmak isterseniz Unity içinden Edit > Project Settings > Input Manager kısmından dilediğiniz gibi düzenlemeler yapabilirsiniz.
Yönlerin Anlanması
İlk olarak bütün komutlara geçmeden önce sizlere 2 adet yöntem ile nasıl kullanıcıdan hangi yöne gittiğimizi bulabileceğimizi anlatacağım.
1) Klavye Tuşlarını Kontrol Etmek
Benim hiç tavsiye etmediğim yöntemlerden birisi olan yoldur ve if koşulları kullanılarak klavyeden basılan tuş anlaşıldıktan sonra yapılması gereken işlem / komut çalıştırılır.
if(Input.GetKey(KeyCode.A)){ komut } if(Input.GetKey(KeyCode.D)){ komut } if(Input.GetKey(KeyCode.W)){ komut } if(Input.GetKey(KeyCode.S)){ komut }
Yukarıdaki komut ile hangi tuşa basıldığında hangi yöne gideceği belli olduğu için if kısmından sonra hemen yön kodlarını yazabiliriz ve karakterimiz o yöne doğru harekete geçer.
float hiz = 10; if(Input.GetKey(KeyCode.A)){ transform.Translate(hiz * Time.deltaTime,0,0); } if(Input.GetKey(KeyCode.D)){ transform.Translate(-hiz * Time.deltaTime,0,0); } if(Input.GetKey(KeyCode.W)){ transform.Translate(0,0,hiz* Time.deltaTime); } if(Input.GetKey(KeyCode.S)){ transform.Translate(0,0,-hiz* Time.deltaTime); }
Yukarıdaki işlem bana göre biraz fazla gereksiz kod satırı bulundurduğu için gereksiz bir yöntem olarak düşündüğüm bir yöntemdir.
2) Input Manager Kullanmak
Gerçekten kullanışlı bir yöntemdir ve oldukça az satır komut ile oldukça verim alabildiğimiz yazım biçimidir.
Bir adet Vector3 değişkeni tanımlanır ve içerisine Input Managerden gelen veriler yerleştirilir, Input manager eğer tanımlı tuşa basıldığını görürse +1 ve -1 gibi değerler alarak yönü belirtir size de sadece bu değeri hız ile çarparak karakterinizi hareketlendirmek kalır.
Vector3 hareketYonleri; hareketYonleri = new Vector3(Input.GetAxis("Horizontal"), 0 , Input.GetAxis("Vertical")); transform.Translate(hareketYonleri.x * hiz * Time.deltaTime, 0, hareketYonleri.z * hiz * Time.deltaTime);
public hiz olarak bir değişken belirledim ve bu hız değişkenini daha sonrasında sahnemde değiştirerek karakterim için uygun olan hız değerini bulabiliriz.
Input Managerden gelen tuş bilgisine göre Vector3 değişkenindeki x ve z değerleri ile oynuyor +1 veya -1 almalarını sağlıyor buna göre de hız ile çarpınca hareket elde etmiş oluyoruz.
Horizontal yatay (sağ ve sol yön tuşları, a ve d harf tuşları ile kontrol edilir.) yönü temsil etmektedir..
Vertical dikey (dikey ve düşey yön tuşları, w ve s harf tuşları ile kontrol edilir.) yönü temsil etmektedir.
Hareket Ettirmek İçin Yöntemler
Translate Yöntemi İle Hareketlendirmek
Vector3 hareketYonleri; hareketYonleri = new Vector3(Input.GetAxis("Horizontal"), 0 , Input.GetAxis("Vertical")); transform.Translate(hareketYonleri.x * hiz * Time.deltaTime, 0, hareketYonleri.z * hiz * Time.deltaTime);
Position Kullanarak Hareketlendirmek
Vector3 hareketYonleri; hareketYonleri = new Vector3(Input.GetAxis("Horizontal"), 0 , Input.GetAxis("Vertical")); transform.position = new Vector3(transform.position.x + hareketYonleri.x, transform.position.y , transform.position.z + hareketYonleri.z);
AddForce Kullanarak Hareketlendirmek
Vector3 hareketYonleri; hareketYonleri = new Vector3(Input.GetAxis("Horizontal") * hiz * Time.deltaTime, 0 , Input.GetAxis("Vertical") * hiz * Time.deltaTime); karakterRB.AddForce(hareketYonleri, ForceMode.Impulse);
Velocity Kullanarak Hareketlendirmek
Vector3 hareketYonleri; hareketYonleri = new Vector3(Input.GetAxis("Horizontal") * hiz, 0 , Input.GetAxis("Vertical") * hiz); karakterRB.velocity = hareketYonleri;
2 yorum
Vector3 hareketYonleri;
hareketYonleri = new Vector3(Input.GetAxis("Horizontal") * hiz, 0 , Input.GetAxis("Vertical") * hiz);
karakterRB.velocity = hareketYonleri;
Bu kod kısımlarının arkasını nasıl mavi yaptın bende böyle bir şey yapıcamda bir türlü bulamadım