Unity’de Script Temelleri

 


Unity ile bir Oyun Akademisi programı sayesinde yaklaşık 5 ay önce tanıştım. Onun öncesinde oyun yazmak gibi bir amacım ve ilgim yoktu.

Tesadüfen kabul edildiğim bir program sayesinde oyun üzerine çalışmalar yapmaya başladım ve ne yalan söyleyeyim hoşuma gitti. C# temelim olduğu için konuya biraz özgüvenle giriştim ancak yazılımda bildiklerimin bilmediklerim yanında devede kulak olduğunu acı tecrübeyle öğrendim zira bu C# benim bildiğim C# değildi 😛

Çabuk adapte oldum neyse ki ve program ilerledikçe ufak da olsa oyun projeleri geliştirdim. 3 aylık sürecin sonunda bitirme projemi de teslim ettim. Eğer kabul alırsam ve programdan mezun olabilirsem onu da buradan duyuracağım.

Gelelim Unity’ye.

Unity Nedir?

Unity’yi oyun geliştirme sürecini kolaylaştıran ve hızlandıran bir oyun motoru olarak tanımlayabiliriz. Bünyesinde barındırdığı araç setleri sayesinde 2D ve 3D oyunlar tasarlayabiliyoruz.

Çok geniş bir topluluğu ve hatta İngilizce biliyorsak UnityLearn adında kendi eğitim sayfası bile var ve bence basit geliştirmeleri öğrenmek için oldukça faydalı ve kapsamlı.

Unity’yi kullanarak bilgisayarlar, mobil cihazlar ve oyun konsolları gibi farklı platformlarda oynanmak üzere oyunlar geliştirebiliyoruz.

Hazır varlıkların, modellerin, seslerin ücretli ve ücretsiz seçenekleriyle indirilebileceği bir Asset Store’u var. Buradan basit nesneler ya da karakterler gibi varlıkları indirerek projemizde direkt olarak kullanabiliyoruz.

Scripting

Yazımın esas konusu olan Scripting’e gelelim. Unity’de oyun nesnelerini hareket ettirme, etkileşimler ekleme, oyun mekaniği oluşturma ve daha pek çok şeyi yazdığımız Script’ler ile yani kod dosyaları ile gerçekleştirebiliyoruz.

Proje klasörleri altında Scripts isimli klasör oluşturarak tüm yazacağımız Script dosyalarını bu klasörde toplamak ideal olanı. Bunu da proje klasörlerine sağ tıklayarak Create Folder seçeneği ile yapabiliriz.



Yukarıdaki ekran görüntüsünde benim geliştirdiğim bir oyunun klasörlerini görebiliriz. İki farklı asset klasörünü AssetStore’dan indirdim ve bunlar da proje klasörleri arasında görünüyor. Create komutu ile oluşturduğum Script klasörü henüz içerisinde bir dosya bulunmadığından içi boş ikonla geliyor. Bu klasörün içerisine girip Create C# Script komutunu seçtiğimde ise aşağıdaki gibi bir görüntü oluşuyor.

Bu benim yeni Script dosyam. Buna çift tıkladığımda karşıma Script dosyasının Visual Studio programı kullanarak oluşturulmuş penceresi geliyor ki Unity’yi bilgisayarımıza kurarken bu programı da beraberinde kuruyoruz. Ve işte Script dosyam:

Bu dosya bir sınıf adıyla geliyor. Bu sınıf dosya adımızın aynısı. Buradaki örnekte ben default tanımlanan ismi silmedim, bu yüzden NewBehaviourScript adıyla geldi. Ancak geliştirme ortamında kendimiz isimlendirme yapıyoruz: PlayerController, BallController, SpawnManager gibi.

Sınıf içerisinde görünen Start ve Update metotları hazır geliyor. Kodlarımızı gerekirse bu metotların içerisine yazabilir ya da gerekmiyorsa bunları silip kendi metotlarımızı da oluşturabiliriz.

Script İçeriği

Script içerisine kodlarımızı C# dilinde yazıyoruz ve oyun nesnelerinin davranışlarını ve etkileşimlerini kontrol ediyoruz. Örneğin, bir nesneyi hareket ettirmek için transform.Translate gibi Unity'nin sağladığı fonksiyonları ya da diğer nesnelerle etkileşim kurmak için OnCollisionEnterOnTriggerEnter gibi olay yöntemlerini kullanabiliyoruz.

Oyuncumuzu yatay ve dikey eksende hareket ettirecek Scripti yazalım.



Burada başlangıçta hareket etmesini istediğimiz oyuncumuzun hareket hızını belirliyoruz.

Sonrasında her karede bir kez çalışan Update metodu içerisine kodlarımızı yazmaya başlıyoruz.

Input.GetAxis("Horizontal"): Klavyeden alınan yatay (sol-sağ) girişi alıyoruz.

Input.GetAxis("Vertical"): Klavyeden alınan dikey (ileri-geri) girişi alıyoruz.

Vector3 moveDirection: Hareket yönünü belirlemek için bir vektör oluşturuyoruz. Normalize ederek vektörün uzunluğunu 1'e sabitliyoruz. Bu, vektörün yönünü korurken uzunluğunu 1'e dönüştürmek anlamına geliyor. Bunu özellikle vektörün büyüklüğünün (uzunluğunun) farklı değerler alabileceği durumlarda yapıyoruz, çünkü bu şekilde vektörün yönü önemli hale geliyor, büyüklüğü değil.

transform.Translate(moveDirection * moveSpeed * Time.deltaTime): Bu satırla oyuncuyu, belirlediğimiz hareket yönü ve hızı kullanarak hareket ettirebiliyoruz. Time.deltaTime, oyunun performansına bağlı olarak her karede geçen süreyi temsil ediyor ve bu sayede hareketin pürüzsüz ve gerçekçi olmasını sağlıyor.

Oyuncuyu hareket ettirecek kodlarımızı yazdık. Oyuncumuzu da sahnemize koyduk. Peki bu kodların oyuncuyu hareket ettirmesi gerektiğini program nasıl anlar? Bunu da şu şekilde yapıyoruz: Belirlediğimiz oyuncu karakterin Inspector bölümünde Add Componenta tıklayarak ya da Scripti Inspector bölümüne sürükleyerek oyuncumuza bağlıyoruz.


Yukarıda gördüğümüz gibi Script içerisinde bulunan değişkenler ve diğer bilgiler ile Oyuncumuza eklendi. Burada moveSpeed değişkenini public olarak belirlediğimiz için atanan 5 değeri ile birlikte burada göründü ve istersek bu 5 değerini aşağı ya da yukarı yönlü değiştirebiliyoruz. Eğer bu değişkeni private olarak tanımlamış olsaydık burada görünmeyecek dolayısıyla değiştirilemeyecekti.

Geriye yazdığımız kodların doğru çalışıp çalışmadığını test etmek kalıyor. Bunu da oyunu çalıştırarak yani play’e basarak yapabiliyoruz. Eğer çalışmıyorsa yazdığımız kodlara dönüp kontrol etmemiz ve Script’i doğru bileşene bağlayıp bağlamadığımızı kontrol etmemiz gerekiyor.

Bu noktada bilmemiz gereken önemli bir şey daha var. O da şu: Script’i test etmek amaçlı play’e bastık ve oyunu çalıştırdık. Yukarıdaki örnekten gidersek moveSpeed değişkenini 5 yerine 10 yaptık. Yaptığımız değişikliğin neleri nasıl etkilediğini kontrol edebiliyoruz elbette ki bu özellik zaten bunun için var. Ancak oyunu çalıştırdıktan sonra yani Play mode’da iken yaptığımız hiçbir değişiklik kaydedilmiyor. Yani oyunu durdurduğumuzda değişkenin 5 değerine geri çekildiğini görüyoruz. Buna da dikkat edelim.

Sonuç olarak Script programlama, Unity’de oyun geliştirme sürecinde temel bir role sahip. Oyun nesnelerinin davranışlarını ve etkileşimlerini kontrol ederek, istediğimiz oyun mekaniğini oluşturabiliyoruz. Umarım faydalı olmuştur.

Teşekkürler.

Selin.



Hiç yorum yok: