"Enter"a basıp içeriğe geçin

Unity Günlüklerim (Roll-a-Ball) #2

Bu bölümde 3. videoyu ele alacağız. Fiziksel güçleri ve klavye girdilerini kullanarak playerı hareket ettireceğiz. 

Playera fiziksel güç verecek olan componentin adı Rigidbody’dir. Rigidbody yer çekimi, sürtünme gibi fiziksel özellikleri barındırmaktadır.

Playerı seçelim Inspector ekranından Add Component’e tıklayalım ve arama kısmına Rigidbody yazalım ve ekleyelim.

Inspector ekranındaki componentlerin yerlerini değiştirmek mümkündür. Mesela Sphere Collider’ı pek kullanmamıza gerek kalmayacak. Bu yüzden sürükle bırak ile en alta alabiliriz.

Ayrıca yanlarındaki okları kullanarak yer tasarrufu sağlayabiliriz. 

Soldaki daraltılmamış hali. Solda gözüken yardımcı çizgilere gizmo denmektedir.

Ayrıca daraltılan componentin gizmo özellikleri kapatılmış olur.

Playerı hareket ettirmek için klavyeden gelen verilerileri almalıyız ve o yöne doğru güç uygulamalıyız. Bunun için bir script oluştaracağız ve bu scripti playera ekleyeceğiz.

Scripts adında bir klasör oluşturalım ve içerisine Create>C# Script seçin adını PlayerController yapalım. Sürükle bırak ile Player objemize ekleyelim ve PlayerController’a çift tıklayıp açalım.

Önce kodlarımızı temizledik. Şimdi ne yapmak istediğimizi düşüneceğiz. Her framede playerın olduğu yeri kontrol etmek istiyoruz. Peki bunu nerede kontrol edeceğiz? İki seçeneğimiz var: Update() ve FixedUpdate().

Update() renderlanan her frameden önce çağırılır.
FixedUpdate() sadece performans ve fiziksel olayları hesaplarken çağırılır. (Bunu bilmiyordum öğrenmiş oldum.)

Yukarıdaki özelliklere göre karakterimiz Rigidbody ile yani fiziksel güç ile hareket edeceği için FixedUpdate içerisinde kontrol edeceğiz.

FixedUpdate() içine Input yazdık çünkü klavyeden gelen verileri okuyor. Input ile ilgili dökümantasyona girmek için Inputu seçip (Visual Studio için) önce CTRL+ALT+m sonra CTRL+h tuşlarına basalım.

Açılan pencereden sadece Input yazana tıklayalım.

https://docs.unity3d.com/ScriptReference/Input.html

Alt taraflara inildiğinde diğer fonksiyonlar gözükecektir. Biz bunlardan GetAxis olanı kullanacağız. GetAxis’e tıklayalım ve bu fonksiyonunda özelliklerine bakalım.

GetAxis metodunun string bir değer aldığını görüyoruz.

Örnek olarak verilen kodu incelersek Vertical ve Horizontal olarak 2 tane değer aldığını görürüz. Bunlar dikey ve yatay olarak bastığımız yönün değerlerini alacaklar. Üstündeki açıklamadan da -1 ile 1 arasında değer aldığını görüyoruz. (2D oyunlarda bu değerler ile sağa sola hareketlerde karakterin dönmesi sağlanabiliyor. Başka örneklerde anlatacağım.)

Tanımlamamızı yapalım. Artık player klavyeden gelen verileri okuyabiliyor.

Player Rigidbody kullanmakta. Inputun özelliklerine bakarken kullandığımız gibi Rigidbody içinde aynı yöntemi kullanalım. Playerı hareket ettireceğiz yani gideceği yönde bir güç uygulayacağız. Bunun için AddForce kullanılmakta.

Yukarıda hangi parametreleri aldığını görebiliriz. Vector3 üç tane ondalık sayı tutmaktadır. Aşağıda tanımlarken anlatacağım.

Verdiği kodlara bakarsak thrust yani itmek için uygulanacak değeri almış.
Rigidbodye erişebilmek için rb değişkeni tanımlanmış. 
Start metodu oyun başlatıldığında bir kere çalışmaktadır. Bizimde playerın componenti olan Rigidbodye bir kere erişmemiz yeterli olacak. Bunun için Start metodunu kullanıyoruz.
GetComponent ile componenti getir diyoruz. Hangi component? <> içinde yazan component yani Rigidbody componenti.
Daha sonra FixedUpdate() metodunda Rigidbody fonksiyonu olan AddForce kullanılıyor ve forward yani ileri yöne itme gücü uyguluyor. Böylece player hareket etmiş oluyor.

Şimdi bunları kendi kodlarımıza uygulayalım.

  1. private olarak rb tanımlandı.
  2. Start fonksiyonu oluşturuldu ve playerın Rigidbody componentine erişildi.
  3. Güç uygulanabilmesi için gideceği yön yani Vector3 değerleri lazım.

Vector3 değerlerimizi aldık ve kullandık. (Yukarıya doğru hareket olmayacağı için y eksenini 0.0f yaptık) Oyunu çalıştırdığımızda hareketin sağlanmış olduğunu görüyoruz. Fakat çok yavaş.

Playera hız vermek için float tipinde speed değişkeni oluşturduk. Speed değişkenini public yaptık çünkü arayüzden istediğimiz değeri girmek istiyoruz.
Ardından movement * speed ile itme gücünü arttırmayı amaçlıyoruz. Şimdi test zamanı. Unity’e dönelim.

Inspector alanında Speed adında bir alan geldiğini görüyoruz. Buraya ben 10 yazdım ve test ettiğimde hızın değiştiğini görüyorum.

Bir sonraki derste kamera hareketini ele alacağız. Başarılar.

Bu yazıyı Medium’da okumak için:

https://medium.com/@osmananilozcan/unity-g%C3%BCnl%C3%BCklerim-roll-a-ball-2-60d1a5e99537

Önceki yazı:

Sonraki yazı:

Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.