6 Mayıs 2014 Salı

Scritpler Devam:Fonksiyonlara Detaylı Bakış

Fonksiyonlara Detaylı Bakış                         

Unity'nin Update() (Güncel, Sürekli yapılan) ve Start() (Başlangıç, Tek seferlik) fonksiyonları  

Unity’nin scriptlerimizi çalıştırmak için kullandığımız fonksiyonları bulunmaktadır. En yaygın olarak kullanılan fonksiyon Update() fonksiyonudur. Her yeni bir script oluşturduğunuzda bu fonksiyon da otomatik olarak scriptin içerisinde yazılı olarak gelir. Ee, bu da demektir ki bu fonksiyon dehşet derecede önemli. Bir bakış atalım.
Yeni bir script oluşturmak    

Yeni bir UnityScript (JavaScript) oluşturmak için üst taraftaki menüden şu yolu izleyin:  
Assets --> Create (Oluştur) -->  JavaScript  
Niçin JavaScript? Unity’nin resmî forumlarında bu konuyla ilgili pek çok tartışma konusu açıldı. Çoğu kişi bu dile JavaScript yerine UnityScript demeyi tercih ediyor, çünkü bu dil tam olarak JavaScript değil, ancak çok benzer yapıda. Ben de bu dili UnityScript olarak adlandıranlardanım.

Bir script oluştururken ‘Assets’ menüsünü kullandığımıza dikkat ettiniz mi? Hatırlayın, bir scripti GameObject’e (Oyun Objesi) atadığınız zaman script sihirli bir şekilde o GameObject’in bir Component’i (Parça) oluveriyordu. Eğer sözlüğü açıp da ‘Asset’ kelimesinin anlamına bakarsanız şu tanımla karşılaşırsınız: "a useful or valuable thing or quality." (Türkçesi: Değerli veya işe yarar, kullanışlı şey). Ve elbette bir script de bir GameObject’i daha kullanışlı (useful) kılar. :)


NewBehaviourScript adında yeni bir script oluşturduk  

Bu yeni UnityScript dosyası Unity’nin arayüzünde yer alan Project (Proje) paneline yerleşti. Varsayılan olarak ismi otomatikman ‘NewBehaviourScript’ olarak ayarlandı.


Scriptin ismini değiştirmek    
Scriptinizin ismini değiştirmek için önce onu mouse ile seçin ve ardından F2 tuşuna basın (MAC OS işletim sistemi kullanıyorsanız Enter tuşuna basın.). Ardından scriptinize ne işe yarayacağını her gördüğünüzde anlayabileceğiniz, açıklayıcı bir isim verin. Bu bir eğitim kılavuzu olduğu için ben kendi scriptimi ‘StudyFunctions’ (EgitimFonksiyonlari) olarak adlandırıyorum. İsim değişikliğini hallettikten sonra Enter tuşuna basarak isim değişikliğini bitirin.

NOT: Scriptlerinizi isimlendirirken, tıpkı değişkenlerde olduğu gibi, Türkçe karakter kullanmayın. Aksi takdirde bir objeye atadığınız scriptinizin Component’ine, başka bir scriptten erişim yapamazsınız, çünkü kodlama dilleri kesinlikle Türkçe karakterleri desteklemez, hata verir. 


Scriptimizi ‘Scripts’ klasörüne taşımak    
1. Sadece scriptinizi mouse ile sürükleyip ‘Scripts’ klasörüne atın.
2. İşte benim scriptim.

NOT: Eğer ki sizde ‘Scripts’ diye bir klasör yoksa telaş yapmayın, çünkü bu klasör projenize isteğe bağlı olarak eklediğiniz hazır paketler vasıtasıyla gelir ve Unity’nin hazır scriptlerini içerisinde barındırır. Kendiniz bir klasör oluşturmak içinse yine Project panelinde, üst taraftaki ‘Create’ (Oluştur) butonuna basın ve ardından ‘Folder’ (Klasör) seçeneğini seçin.                


Unity'nin Inspector paneline bakın    

Project (Proje) panelinde scriptiniz seçiliyken Inspector paneline bakarsanız scriptinizin içeriğini görebilirsiniz.
1. Burada scriptinizde otomatik olarak oluşturulan Update() fonksiyonu bulunmakta.
2. Edit butonuna basarak script editörü vasıtasıyla scriptinizi düzenleyebilirsiniz.

Update(): Sürekli, sürekli ve sürekli "Şunu yap" fonksiyonu

Niçin Update() fonksiyonu otomatik olarak yeni scriptlere eklenir?

Unity oyununuz sırasında her bir karede (frame) otomatik olarak bu fonksiyonu gerçekleştirir.
(Çevirmen Eklemesi): Bir saniye kesinlikle bir kareye (frame) eşit değildir. Bir saniye oyunun hızına göre 30 kare de olabilir, 60 kare de 150 kare de. Bunu unutmayın.
Script Referans Kılavuzu’nu (Scripting Reference Manual) okudukça, çoğu kodun Update() fonksiyonu içerisine yazıldığını görebilirsiniz.

Start(): Tek bir seferlik “Şunu yap” fonksiyonu  

Unity içerisindeki bir başka çok yaygın kullanılan fonksiyon da Start() (Başlangıç) fonksiyonudur. Bu fonksiyon sadece 1 kere çalıştırılır ve uygulanır.
İçerisinde Start() fonksiyonu bulunan ve bir GameObject’in (Oyun Objesi) Component’i (Parça) olan bir scriptteki Start() fonksiyonu, Unity tarafından, o obje oyunun herhangi bir bölümünde oluşturulduğu anda otomatik olarak tek bir seferlik çalıştırılır.                    


Fonksiyon İsimleri  

Kılavuzun ilk bölümlerinde fonksiyonların ne oldukları hakkında ve niçin onlara ihtiyacımızın olduğu hakkında konuşmuştuk.

Şimdi ise nasıl fonksiyon oluşturabileceğinizi aşama aşama göstereceğim.

 Fonksiyon Tanımlamak (Declare)  

Kullanmak istediğiniz herhangi bir fonksiyonu (function) öncelikle tanımlamalısınız. Bunun anlamı nedir? Bunun anlamı siz Unity’e bir dizi kod yazacağınızı ve bu kod dizisine de bir isim vereceğinizi söylemektir. Ardından Unity siz bu fonksiyonu çağırdığınızda tam olarak neyden bahsettiğinizi bilecektir.

Hadi Start() fonksiyonuna bir bakalım. Bu sizin değil, Unity’nin içinde tanımlanmış olan ve otomatik olarak çağrılan bir fonksiyondur. Buna rağmen bu fonksiyonun içindeki kod dizisi tamamen size bağlıdır.

1. Fonksiyonun ismi olan Start()’tan hemen önce bir ‘function’ takısı getirdik. Başa ‘function’ takısını koyman Unity’e yeni bir fonksiyon oluşturmakta olduğumuzu söyler.
2. Fonksiyon ismi olan Start’tan hemen sonra iki parantez “( )” açılır. Bu parantezlerin anlamı, işlevi nedir?  

Bu parantezler bir fonksiyonun parçası olmakla beraber (Yazması zorunlu parçası) bu parantezler sayesinde fonksiyonun içine özel veri (data) girişleri de yapabiliriz.

Şu anda kafanızı parçalayıp ne demek istediğimi kavramaya çalıştığınızı görür gibiyim :) . Madem Start() fonksiyonundaki parantezlerin içerisinde hiçbir şey yazmıyor, o zaman bu fonksiyona hangi veri giriyor ki?
Aslında hiçbir şey yok gibi duruyor değil mi, ancak korkmayın, adım adım bunu açıklayacağım.

3. Fonksiyonun başlangıç noktasına bir tırtıklı parantez ‘{‘ işareti koyulur,
4. Fonksiyonun bitim noktasına da bir tırtıklı parantez ‘}’ koyulur.
 NOT: Fonksiyon tanımlamaları (declaration) göreceğiniz üzere sonlarına ‘;’ (Noktalı virgül) almazlar. Derleyici (compiler) bu sondaki tırtıklı parantezin ‘}’ fonksiyonun bitiş noktası olduğunu anlar.
5. Bu iki tırtıklı parantez (3 ve 4) arasındaki her şey fonksiyonun gövdesini (body) oluşturur, buraya yazılan kodlar fonksiyon çağrıldığı zaman gerçekleştirilir.
NOT: Biraz kişisel bilgiye kaçacak ama olsun. Ben aylar önce ilk defa fonksiyonları öğrenmeye başladığımda bu şeyin nasıl işlediğini anlamak için az daha kendimi paralıyordum. Basitçe belirtmek gerekirse burada neler olup bittiğini bir türlü kafam almıyordu. Sonradan anladım ki fonksiyonlar tekrar tekrar kullanılabilen kod parçalarından ibaretmiş, bu kadar basit. Buna rağmen bir fonksiyonu çağırmak ve içine özel veri girmek hâlâ kafamın basmadığı konulardı; bunun bir diğer nedeni de kitaplar yazıp bu konuda eğitim veren şahsiyetlerin bu konuda hiç detaylı bilgi vermemesiydi. Bu yüzden bu dersleri yazıyorum, çünkü ben bu konuyu anlamaya çalışırken çok zorluklar çektim ve sizin de çekmenizi istemem.

Bir sonraki bölüm, yaşadığım sıkıntıyı yaşamamanız için bu bahsettiğim konuyla ilgili olacaktır.