
Unity Translate ile Nesneyi Hareket Ettirmek
Merhaba, bir önceki yazımızda Unity ile menu yapımına bakmıştık.Şimdi ise herhangi bir nesneyi gerekli kodlar vasıtasıyla nasıl hareket ettirebileceğimize bakalım.Bu dersimizde kullanmak üzere, bir adet Plane nesnesine ve bir adet Cube nesnesine ihtiyacımız olacak.Buradaki Plane bizim hareket edeceğimiz zemini oluştururken, Cube ise asıl hareket ettireceğimiz nesneyi oluşturacaktır.Hierarchy penceresinde sağ tıklayarak sırasıyla, 3D Object > Plane ve 3D Object > Cube seçimlerini yapıyoruz.
Sahne oluşturmak.
İlk olarak bu iki nesneme farklı renkler vererek birbirinden ayırmak gerekiyor.Bunun için Project penceremde sağ tıklayarak sırasıyla, Create > Material seçiyorum.Daha sonra ismini değiştiriyorum.Oluşturmuş olduğum bu material nesnesi, projemizde kullanacağımız nesnelerin kaplamalarını ayarlamak için kullanılıyor.Şimdi bunu seçelim ve sağ taraftaki Inspector penceresinde Albedo bölümünden farklı bir renk seçelim.Evet zeminimizin rengi hazır.Tekrar yeni bir material oluşturalım ve aynı aşamaları onun içinde yapalım.Şimdi elimizde iki tane material nesnesi mevcut.
Bunları tutup sürükleyerek, ilgili nesnemizin üzerine bırakıyoruz.Böylelikle renklerin değiştiğini göreceksiniz.Bu kısımı tamamlamadan önce bir şey daha yapmamız gerekiyor.O da, kameramızın açısını ayarlamak.Bunu nesne hareketi tam olarak görebilmek için yapacağız.Öncelikle Scene Penceremizde, eli (kısayolu Q) seçerek kameramızın pozisyonunu istediğimiz şekilde ayarlıyoruz.Aynı zamanda farenin sağ tuşuna basıp ileri geri yaparak, kameramızın açısını ayarlıyoruz.
Bunları yaptıktan sonra, Game penceresine bakacak olursak kameranın açısında bir değişiklik olmadığını göreceksiniz.Bunu değiştirmek için Hierarchy penceresinden Main Camera nesnesini seçiyoruz.Daha sonra üst menüden sırasıyla, GameObject > Align With View yada kısayol olarak ctrl+shift+f seçimini yapıyoruz.Böylelikle projemizi başlattığımızda, bizim ayarladığımız açıda kameramız görünecektir.
Gerekli kodların yazılması.
Şimdi sahnemiz hazırlandı.Hemen Project penceremde sağ tıklayarak sırasıyla, Create > C# Script‘i seçiyorum.Script dosyama bir isim veriyorum ve açıyorum.Yine çok kafa karıştırmadan en basit haliyle anlatacağım.Ve kullanacağım kodlar sadece amaca yönelik olacaktır.Nesne hareketinden birden fazla yol var.Sizin o anki projenizdeki ihtiyaca göre farklı teknikler kullanabilirsiniz.Ben iki farklı yöntem göstereceğim.Birinci yöntem yani bu yazımızda Translate, ikinci yöntem olan ise Rigidbody‘i ise diğer derste anlatacağım.
Yoksa yazı çok uzuyabilir.Kısaca anlatayım.Translate yönetimi, nesnemizin pozisyonunu her karede değiştirerek hareket ettirmeyi amaçlıyor.Rigidbody yönteminde ise, nesneye uygulamış olduğumuz fizik kuvveti ile hareket ettiriyoruz.Artı ve eksileri tartışılır.Dediğim gibi ihtiyacınızı hangisi daha çok karşılıyor ise onu kullanın.İlk yöntem olan, Translate için gerekli kodlarımızı yazmaya başlayalım.Öncelikle nesnemize bir hız vermeliyiz.Bunun için,
public float NesneHizi;
Kodunu Start() fonksiyonumuzdan önce yazıyoruz.Koda bakacak olursak, bir değişken tanımladığımı görüyorsunuz.Bu değişkenimizin türü float yani tam tabiriyle kayan noktalı sayıları (3.15, 6.00045 gibi) alabiliyor.Tabi bu noktadan sonraki maksimum 7 basamağı kapsıyor.Değişkenimizi yazdıktan sonra, Start() fonksiyonunu içine,
NesneHizi = 5f;
Kodunu yazıyorum.Burada Projemizi başlattığımız zaman, NesneHizi değişkenini 5 birime eşitle demiş olduk.Beşin sonunda yer alan “f”, float‘ın kısaltması olarak kullanılıyor.C# scripti yazarken float türündeki sayıların sonuna muhakkak eklenmesi gerekiyor.Yoksa hata alırsınız.Şimdi Update() fonksiyonumuzun içine hareket etmek için gerekli kodlarımızı yazalım.
transform.Translate (Input.GetAxis("Vertical")*Vector3.forward*NesneHizi*Time.deltaTime);
Yazdığımız kodların detayları.
Evet bu kodu açacak olursak, “yatay eksen * ileri yön * belirlediğimiz hız *zaman.Bunu biraz daha açalım, klavyeden (standart olarak A-D ve Yukarı-Aşağı Ok olarak tanımlıdır.) tuşa bastığımız zaman, ileri yönde belirlediğimiz hız ile ve kare hızının aynı olması için çarptığımız Time.deltaTime ile hareketimizi oluşturuyoruz.Burada Time.deltaTime koduna ayrı bir parantez açmak istiyorum.Zira bu kod ile hızımı çarparak aslında projemizin çalıştığı her makina için aynı hızı elde etmiş olduk.
Yani bir makine 10 kare hızında çalışır olsun, 1/10=0.1 değerini verecektir.Diğer makine 20 kare hızında çalışsa, 1/20=0.05 sonucu ile karşılaşacağız.Yani her iki makinede de, hareket ettirdiğimiz nesne ayrı hızlarda gidecektir.Bunu önlemek içinde, Time.deltaTime kodunu kullanıyoruz.Şimdide dikey eksende hareket etmesi için kodumuzu yazalım.
transform.Translate (Input.GetAxis("Horizontal")*Vector3.right*NesneHizi*Time.deltaTime);
Yazdığımız bu kodun farklılıklarına bakacak olursa, yatay eksen * sağ yönde * belirlediğimiz hız *zaman olduğunu göreceksiniz.Yatay eksen olduğu için ileri gitmek yerine sağa gitmesi gerektiğini söylüyoruz.Ve yine klavyeden (standart olarak W-S ve Sağ-Sol Ok olarak tanımlıdır.) ilgili tuşlara basarak hareketimizi gerçekleştiriyoruz.Kodlarımızı yazdık ve çalıştırmaya hazırız.
Project penceremden C# script dosyamı tutup hareket ettireceğim nesnenin üzerine bırakıyoruz.Artık projemi başlatıp sonuçları görebiliriz.Evet dikkat edersek, ben yukarı oka (yada w tuşuna) bastığım zaman nesnen geriye gidiyor.Aynı şekilde aşağı oka (yada s tuşuna) basarsam da, tam tersi ileri doğru gidiyor.Aynı şey yatay eksen içinde söz konusudur.Bunu hemen düzeltebiliriz.Editörüme geri döndüm ve vector3.forward ile vector3.right kodlarımın başına “-” yazıyorum.Kaydedip tekrar projemizi başlatırsak, artık doğru yönlerde ilerlediğini görebiliriz.
Evet bu dersimizde bu kadardı.İkinci yöntemimiz olan Rigidbody, yani nesnemizi fizik ile hareket ettirmeye diğer dersimizde bakacağız.Görüşmek üzere…
[…] herhangi bir değişiklik olmayacaktır.Eğer bu yazıyı ilk kez okuyorsanız, önce bir önceki yazıda oluşturduğumuz sahneyi hazırlayın ve tekrar bu yazıya geri dönün.Çünkü aynı şeyleri […]