Unity ile  Flappy Bird Oyunu

Herkese Merhabalar;

Yazıma Linus Torvalds amcanın bir sözüyle başlamak istiyorum “Talk is cheap.Show me the code.” Yani diyor ki söz uçar kod kalır.Günümüz blog yazarlarını fazlasıyla ilgilendiriyor sanırsam.Çok fazla yorum kodu anlaşılmaktan ziyade karmaşıklaştırır.Bırakın kodunuzu açıklamayı kodu açıkça yazarsanız herkes açıklamadan ziyada kodu çalıştırmakla uğraşır ve insanlara daha fazla katkı sağlayabiliriz neyse asıl konumuzdan sapmadan unitye geçelim.

Öncelikle çalışma alanım kesinlikle unity olmamakla beraber hobi olarak bir kaç publish te googleplay ve stream gibi platformlarda amatör olarak oyunlarım mevcut fakat kesinlikle üst düzey bir bilgi birikimim yok ve ilgilendiğim web teknolojileri vaktimin çoğunu aldığı için bu kısımda kendimi geliştiremedim belirtmek isterim fakat yeni başlayan veya benim gibi hobi olarak bir kaç bişi yapmak isteyenlere faydalı bir yazı olacağına eminim.

Diğer Oyun Motorları

Gerçekten çok fazla oyun motoru var.Unity ile diğerleri arasındaki tartışmayı .net ile node.js tartışmalarına benzetiyorum.İlk başlarda .Net gibi private bir app olarak işe başlamışlar gerçi hala bir nevi private fakat daha sonra comminute’nin desteği ile bir çok özelliği public olarak yayınlanmış bu da halk için önemli bir gelişme istediğimiz bir property istediğimiz çalışma nezdinde değiştirebiliyoruz.Üstelik bu iştede gayet başarılı şekilde işler çıkartıyorlar.Oyun sektöründe olmasam bile çok fazla ilgimi çekti ve zamanında (Bu zaman benim lise 3 veya 4. Sınıfıma denk geliyor.) çok fazla popüler olan flappy bird oyununu yapmak istedim.

İlk Bakış ve Editörü Tanımak

Editör bir api den beslenmekte.Bunun için Unity Hub denilen bir uygulamayı indirmemiz gerekiyor.Buradan application indirebilirsiniz.

word image 31

Default olarak ilk indirdiğimizde soldaki Menu Hierarchy menüsü olarak geliyor.Burada kullandığınız objeleri animatiyonlari cameları vb. Uygulama property lerini görebilirsiniz.

Soldaki Ekran default olarak gelmiyor.Game ve Scene ekranları tek menü şeklinde geliyor sürükle bırak özelliğinden faydalanarak soldaki resmi elde edebilirsiniz.Bunlar dışında Inspector ve Console kısımları önemli ölçüde kullandığım menüler bu menüleri de kendi arayüz standartlarına uygun olarak konumlandırma bilirsiniz. word image 32

Konsolda uygulamanın bizim istediğimizle yada istediğimiz dışındaki hata vb. Mesajları gördüğümüz kısım Inspector da ise game objelerimize veya scriptlerimize belli başlı özellikler kazandırabileceğimiz kısım.

Uygulamanın Şahlanışı

Editor kısımlarına az biraz aşina olduktan sonra oyun motorlarının temel mantığına değinelim.Asenkron yapıların çok hassas dizayn edilmesi gerekiyor bu tarz applicationlarda kullanıcı yada geliştirici herhangi bir property deki değişikliği anında görmek ister web application lardaki gibi cash den getireyim mantığı maalesef burada işlemiyor.Genel oyun motorları hakkında çok detaylı yazılar internette mevcut daha fazlası ile ilgilenen arkadaşlar bu kaynaklara başvurabilir.

Şimdi gelelim uygulamamıza şimdi yukarıdaki hierarchy kısmında görülen objeleri web teknolojileriyle uğraşan arkadaşlar access layerlar gibi düşebilir hatta tam anlamıyla benzer bir yapı söz konusu burada Animation,Prefabs,Scenes,Script ve Sprites olmak üzere 5 adet katman ile uygulamayı ayağa kaldırmaya çalışcaz.

Animation; Bu kısımda projedeki animasyonların render edilmesi için gerekli resimlerin veya animasyonları barındıracak.

Prefabs;Burada ise hazır yapılarımız mevcut olacak örneğin bizim uygulamızda bu katmanda pipelines olacak üst ve alt borunun bir temel yapı olarak koğuşlandırmamız için bu katmandaki pipeles başvuracak.

Ekranlarımız Scenes katmanında kodlarımız scripts katmanında olacak.Sprites katmanında ise uygulamadaki gerekli objelerin örneğin boruların çimlerin vb. Objelerin bulunduğu kısım olucak.

Genel olarak generic design pattern ler bu şekilde tasarlanır.Tabi uygulamaya göre değişen yapılar da mevcut.

Kod kısımlarında bu uygulama için 4 adet script dosyamız mevcut.Bunlar Birdy kuşumuzun yüksekliğini neye basınca havaya neye basınca öleceğiniz belirlediğimiz kısım.Genel Unity Script Lerinde Start ve Update fonksiyonları default olarak geliyor.Burada update fonksiyonunu olabildiğince az kullanmak yada yaptığı işleri azaltmak gerekiyor.Çünkü yazının başında belirttiğim asenkron yapı sayesinde uygulama başladığında bu yapı sürekli olarak render ediliyor. Buda uygulamayı çok fazla ağırlaştırıyor. Burada update fonksiyonunda tek yaptığımız şey kuşu havalandırmak ve çokça if kullanmak olacak.

Diğer scriptlerde çok anlatmaya değer birşey malesef bulamadım.

Kodları Github Repomda ulaşabilirsiniz.Linus amcamında dediği gibi konuşmak ucuz şey, bana kodu göster.

Umarım faydalı ve eğlenceli bir yazı olmuştur. Herkese sağlıklı günler.

By