Unity ile Oyun Programlama 1

Spac

OMGAME
Sponsor
Asistan
Mesajlar
33
En iyi cevaplar
0
Puanları
1,080
Ruh Hali


unity-monodevelop.jpg



Unity ile Oyun Programlama 1

Bu yazımda Unity Oyun Motoru kullanarak nasıl oyun programlayabiliriz detaylı bir şekilde anlatmaya çalışacağım. Hiçbir kod bilgisi olmayan arkadaşlar için temel kodlamaya da değineceğim. Herkese selamlar ben Spac.

Piyasada bulunan oyun motorlarının çoğu java dilini kullanıyor. Unity, C# dilini kullanarak oyun yazmamıza olanak sağladığı için çıktığı andan itibaren dikkatleri üzerine topladı. C#'ın ayrıcalığı ise diğer kodlama dillerine göre daha fazla kaynağının bulunması ve programcıların bu dile aşina olmasıdır. Unity'de script dosyalarını hem C# hem de JavaScript ile yazabilirsiniz. JavaScript C#'a göre daha kolay bir dildir ancak C# kadar detaylı olmadığı için kaynak konusunda daha zayıftır. Oyun programlama yazılarımda C# dilini kullanıp bu dil hakkında da gerekli bilgileri vermeye çalışacağım.

Bu yazıyı sıfırdan Unity'de oyun programlayı öğrenmek isteyen arkadaşlar için hazırlıyorum. Bu nedenle en temel kod bilgisinden başlayarak yavaş yavaş ilerleyeceğim. Temel bilgileri bilen arkadaşlar bu yazı ile bilgilerini pekiştirebilirler.


Değişkenler

Unity'de oyun programlarken en çok kullanacağımız değişkenlerden bahsedelim. Integer, Float ve Boolean.
Integer, kelime anlamı olarak tamsayıya denk geliyor. Virgüllü olmayan herhangi pozitif ya da negatif sayıyı Integer olarak tanımlıyoruz.
Örnek: int sayi == 5;

Float, ondalıklı sayılar için tanımlamamız gereken değişken tipidir. Bu değişkende ufak bir kuralımız mevcut. Sayıyı yazdıktan sonra sonuna "f" harfi koymamız gerekiyor. Float değişkenini oyun programlarken birçok kez kullanacağız. Bunun sebebi ise virgüllü sayılar ile daha hassas ayar yapabiliyor olmamızdır. Örneğin bir arabaya hız vermemiz gerekiyor. Bu hızı Integer kullanarak 1'den direk 2'ye çıkarabiliriz Float ile; 1.1, 1.5, 1.9 şeklinde çok fazla değer verme imkanımız bulunuyor.
Örnek: float sayi == 19.07f;

Boolean, True ve False olarak iki değer alır. Yani "Doğru" ve "Yanlış". Boolean değişkenini kontrol olarak kullanırız. Örnek verecek olursak: bir futbol oyununu düşünelim. Top kale çizgisinden geçerse gol olur. Gol olduğunda skor artar. Kontrol adında bir Boolean değişken tanımlıyoruz. Varsayılan olarak Boolean değişkeni False değeri alır. Yani şu an tanımladığımız Kontrol değişkeni False değerini tutuyor. Top çizgiyi geçtiği zaman Kontrol == True; olsun diyoruz. Skor artması için yazacağımız fonksiyona da eğer Kontrol True ise skoru 1 arttır şeklinde kod yazıyoruz. şu an karışık gelmesi normaldir arkadaşlar bu konuyu oyun yaparken daha anlaşılır şekilde göstereceğim.


Koşul ve Döngüler

Kodlarımızda en çok kullanacağımız koşul ve döngüler, If koşulu ve For döngüleri olacaktır. If, "Eğer" kelimesine denk gelmektedir. Az önceki örnekte bahsettiğimiz skoru arttırma yöntemi if ile gerçekleşecektir. Daha detaylı bir şekilde anlatacak olursak, If top çizgiyi geçer ise Kontrol == True; olacak ve If Kontrol == True ise Skor += 1;. Buradaki sistemde kontrolleri If yapısı ile sağlıyoruz.

Yazım kurallarını sıfırdan anlatmak istemiyorum. Onun yerine kodlarımı takip ederek ne nasıl kullanılır görebilirsiniz. Burada ufak bir detay verelim A sayısını 5 değerine eşitlemek için "=" işareti yerine "==" işaretini kullanmamız gerekiyor. "+=" işareti, "sol tarafta bulunan değişkenle sağ tarafında bulunan değişkeni topla ve soldakine yaz" anlamına gelmektedir. Yani var olan bir skorumuz mevcut bu skoru 1 ile toplayıp yine skorun üzerine yazıyoruz. "+=, *=, -=, /=" şeklinde kullanımları mevcuttur. Kısayol olarak Skor++; dediğimiz zaman yine Skor 1 artacak ya da Skor--; dediğimiz zaman 1 azalacaktır. Bu detayları verdikten sonra For döngümüze geçebiliriz.

For döngüsü ile, istediğiniz bir işlemi belirttiğiniz şart boyunca tekrarlayabilirsiniz. Mesela ekrana 1 rakamını yazdıracaksınız. Bunu 100 kere yapmak için 100 farklı satıra yazmanız yerine sadece 1 For kullanarak yapabilirsiniz. İleride sahne tasarımlarında, Platform oyunları ve düzeninde For döngüsünü bolca kullanacağız.


Diziler

İsimleri bir arada tutan dizileri veritabanına benzetebilirsiniz. Örneğin string günAdlari[]; diye oluşturduğumuz bir dizi içerisine günleri ekleyebilirsiniz. Eğer diziyi oluştururken ekleme işlemini yapmak istiyorsanız:
string günAdlari[] = ["Pazartesi", "Sali", "Carsamba"];
şeklinde yazmanız gerekiyor. şu an oluşturduğumuz dizi 3 elemanlıdır. Dizilerde indis denen bir kavram mevcut. İndisi eleman sırası olarak düşünebilirsiniz. Dizinin ilk elemanı 0'ıncı indisten başlar. Buna dikkat edelim arkadaşlar, birinci eleman diye 1 den başlamıyor her zaman dizinin ilk elemanı sıfırıncı indisten başlar. Bu ilk elemana erişmek için: günAdlari[0]; yazmamız gerekiyor. Çarşamba elemanına erişmek için ise günAdlari[2]; yazmalıyız. Dizinin son indisi eleman sayısı-1 dir. Dizideki bütün elemanları yazdırmak için tek tek 0,1 diye seçmeyeceğiz tabii ki. Az önce gördüğümüz For döngüsü ile tek bir döngü kullanarak bütün günlere erişebiliriz.



C# Nesne Tabanlı Programlama

Unity'de oyun kodlarını tek bir script üzerinden yazmıyoruz. Farkı C# dosyaları açarak bunlar arasında bağlantı oluşturuyoruz. Açtığımız bu C# dosyalarının her biri farklı bir sınıftır. Bu sınıflarla çalışmak koddaki karışıklığı azaltacaktır. Bir örnek üzerinden gidelim.

Elimizde bir araba var. Bu araba scriptinde arabaya dair bazı özellikler bulunuyor. Örneğin arabanın modeli, motor gücü ve fren sistemi olsun. Bunları ana scriptte tanımlıyoruz. 2019 model 2.0 motor ve abs fren sistemine sahip. Yeni bir araba oluşturacağımız zaman bu özelliklerin aynısını alıp üstüne oluşturduğumuz aracın özelliklerini yazıyoruz. Renk, sunroof, rüzgarlık gibi özelleştirebiliriz.

Bir örnekle daha pekiştirelim. Hayvanlarla ilgili bir oyun yazıyoruz diyelim. Kedigillerin özelliklerini bulunduran bir ana scriptimiz olsun. Bu scriptte koşma hızı, boy ve yaş bulunsun. Oluşturduğumuz bir aslan otomatik olarak kedigillerin özelliklerini barındıracak. Buna ek olarak kendi özelliklerini oyun içerisinde belirleyebileceğiz. Aslana ek olarak birde kedi oluşturduğumuzu düşünelim. Yine kedigiller scriptinde bulunan özellikler kedimize otomatik olarak aktarılacaktır. Bizim yapmamız gerek sadece kediye özel değişkenler tanımlayıp bunlara değerler atamak olacak. Bu durum bizi fazladan kod yazmaktan kurtarır. Hem fazladan yazmamış hem de aynı kodu tekrar etmemiş oluruz. Nesne tabanlı programlama mantığının bize sağladığı bu avantajı oyunlarımızda çok ama çok fazla kullanacağız.

Bu yazımda Unity'de oyun programlamak için gerekli olan temel kod bilgisinden yüzeysel olarak bahsetmeye çalıştım. Anlamadığınız ve daha anlatmadığım birçok bölümü oyun yaparken detaylı şekilde göreceğiz. Umarım sizin için faydalı bir konu olmuştur.

Bir başka yazıda görüşmek üzere sağlıcakla kalın, selamlar.

 


Moderatör tarafından düzenlendi: