Art of CGI  18 Mayıs 2018   Ana Sayfa/Blog Yazıları  

Oyun Geliştirmeye Nereden Başlamalı?

7 ay önce

Ön Bilgilendirme

Oyun sektörü son zamanların en revaçta sektörü halini almaya başladı. Bu denli büyümenin arkasında elbette grafik işlemcilerinin gücündeki hızlı artışında etkisi bulunuyor. Shaderlar, yüksek poligonlu sahneler yüksek vram li ekran kartlı ile kolayca 15-20 gb büyüklüğünde oyunlar oynanabiliyor.

Dünyanın önde gelen Ubisoft, Rockstar Games, Electronics Arts, Crytek ve Bungie gibi dev firmaların yanı sıra artık Indie Developers adıyla andığımız bağımsız oyun geliştiricilerinin sayısındaki artış da oyun sektörünü canlandıran başlıca etmenlerin arasında yer alıyor.

Büyük firmalar gibi kendinize ait bir oyun motorunuz olmasa da piyasada ki Unity, Unreal Engine, CryEngine, Game Maker gibi oyun motorları ile kazançtan pay yöntemi kendi oyununuzu geliştirmeniz artık daha kolay hale geldi. Özellikle son 2-3 yıllık süreçte hem mobil hemde bilgisayar platformları için büyüklü küçüklü ekipler ortaya çıkmaya başladı.

Öncelikle bu iş bir ekip işi. Eğer 3D dünyada geçen bir oyun yapmayı düşünüyorsanız daha da büyük bir ekibe ihtiyacınız olacak. Yada gözünüzü karartıp oldukça uzun süren bir süreçten sonra tatminkar sonuçlar da elde edebilirsiniz. Tabi bunun için oyun programlamadan, shader ve pbr materyal gibi dokulandırma olaylarından, karakter modelleme, rigleme ve animasyon, level of detail gibi daha bir çok kavramlardan haberdar olmanız lazım.Yine de bağımsız bir oyun geliştirici iseniz mobil oyunlara yönelmeniz daha faydalı.

Tek başınıza hadi ben Call of Duty gibi bir oyun yapayım diye yola çıkarsanız bu yolculuğun pek uzun sürmeyeceği aşikar. Bu oyunların her biri sonsuz karmaşık sistemlerden oluşmaktadır ve deneyim, tecrübe, zaman gerektiren oyunlardır. Dev ekiplerin büyük prodüksiyonların elinden çıkan devasa bu tarz oyunlar için kendinizi geliştirirseniz bu oyunların ekiplerinde yer almak çok daha mantıklı hale gelecektir.

Oyun tasarım dokümanı’da denen  ekip halinde çalışacaklar için her ekip üyesinin aşama aşama görevlerinin anlatıldığı bir dosya geliştirme sürecine başladığınız zaman size çok yardımcı olacaktır.

Ayrıca tabi ki oyun oynama mekanikleri ve senaryo da olmazsa olmaz unsurlardandır. Oyunun piyasa da tutunması gibi konuları direk etkiler. Aslen bu konularda açıklanacak çok şey olsa da bu yazı ile yavaştan bir giriş yapalım istedik.

Yine geçen burada haberini yaptığımız 3D Artist Yavuz Yener tarafından hazırlanan içerik oyunların ve animasyonların 3D tarafında nasıl bir geliştirme süreci gerektirdiğini sade ve yalın dille bir anlatmış.

Hangi Programlama Dilini Kullanayım?

Oyun motorlarının yapısına göre farklı programlama dillerini kullanarak oyun yapabilirsiniz. Örneğin, Unity 3D ile C# ve JavaScript dillerini kullanabilirken CryEngine ve Unreal ile C++ dilini kullanabiliyorsunuz. Ayrıca C++ diline göre 10 kat daha yavaş tepkiler verdiği söylense de Unreal ile BluePrint kodlama diye bir olayında var olduğunu belirtelim.

Bu dillerin donanım seviyesine daha yakın olması nedeniyle cihazları yormayacak ve daha fazla performans sağlayacak oyunlar yazılabiliyor. Mobil platformlarda ise şu an en çok kullanılan dilleri Java ve C# olarak söyleyebiliriz. Oyun programlamaya başlayacakların bu programlama dillerinden en az bir tanesine adapte olması gerektiğini de belirtelim.

Oyun Yapmak için Kaç Kişilik Ekip Gerekli?

Ciddi yatırımların yapıldığı oyun sektörü için bazı oyun motorlarının da platform bağımsız oyun geliştirmeyi desteklemesiyle birlikte 2 kişiden başlayan oyun ekipleri oluşmaya başladı. Bu nedenle bu soruya kesin bir cevap vermek malesef mümkün değil. Ama bilgisayar ve konsol gibi yüksek özellikli platformlara oyun geliştirilen ekiplerin 20 ile 100 kişilik bir ekipten oluşmakta.

3D bir oyun yapıyorsanız modelleme, dokulandırma, rigleme, animatör, oyun mekanikleri için yazılımcı yada yazılımcılar, UI tasarımcısı, level tasarımcısı vs gibi uzatabileceğimiz listemizde bile en basitinden 3D bir oyun için 6-10 kişi arasında bir ekibe ihtiyacınız var.

Mobil oyun konusunda ise daha önce de dediğim gibi oyunun büyüklüğüne bağlı olarak 2 kişiden başlayıp 20-30 kişiye kadar bu sayı artabilir. Mesela ülkemizde yer alan Gram Games, Peak Games ve Tale WorldS Enterninment gibi dünyada isim yapmış stüdyolar büyük ekiplere sahip ama Soner Kara gibi (Traffic Racer) indie geliştiriciler sadece grafiker olan abisiyle birlikte çalışmaktadır.

Oyun Programlamaya Nasıl Başlayabilirim?

Eğer kararınız bir mobil oyun yapıp gelir elde etmek ise önünüzde aşmanız gereken uzun bir yol bulunuyor. Ancak ilk etapta programlama dili ve oyun motoru kullanmayı öğrenmelisiniz. Ayrıca hangi programlama dilini öğrenip, hangi oyun motorunu kullacağınızı da uzun süre düşünmeniz gerekiyor.

Bu aşamaları atlattıktan sonra oyunda kullanacağınız grafikler için biraz destek almanız gerekecek. Photoshop gibi temel tasarım programını ayrıca ekranlar arasında boyut farklılıklarından etkilenmemesi için kullanıcı arayüzünde ki (UI) buton vs elementlerin vektörel tabanlı bir yazılım ile hazırlanmasında fayda var. (Adobe Illustrator, CorelDraw)

Bundan sonrası oyunu kodlayacak bir yazılımcıya ihtiyacınız var. Başarılı bir oyun programcısı olmak için uzun süreler tecrübe edinmeniz ve programlama kültürüne aşina olmanız gerekiyor.

Sinan Akkol’un Twitch üzerinden geçtiğimiz günlerde gerçekleştirdi bu yayın size bu süreç hakkında biraz bilgi verebilir.

Yukarıda da dediğim gibi büyük oyun yapmak için de küçükten başlamak gerekiyor. Örneğin Angry Birds oyunu Rovio firmasının 54. oyunudur. Hadi bi kuş oyunu yapayım köşeyi döneyim diye düşünceniz varsa bunu tekrar bi düşünün derim. Küçükten başlayarak yapıları, oyunun kurallarını, neler gerektiğini, nasıl gerçekçi olacağını, fizik kurallarının vs… gibi detaylar size çok şey katacak.

Amazondaki işinin bırakıp kendi oyun stüdyosunu kuran sayın Bilgem Çakır’ın Doğukan Güven Nomak ile gerçekleştirdiği röportaj ise akıllardaki nereden başlamalıyım sorunu aydınlatıyor.

Oyun Yapmanın Mantığını anlamanız için İzlemeniz Gereken Süreç

Öncelikle heyecanlı ve yeni şeyler öğrenmeye açık olun. Üniversite eğitim bitti her şey bitti diye düşünmeyin asıl öğrenme ve tecrübe döneminiz yeni başlıyor. Karşımızda yeni platformlar, yeni API’ler, yeni programlama dilleri, yeni yaklaşımlar, yeni stiller, yeni her şey. Özellikle her an değişen bu sektörde, her zaman yeni şeyler öğrenmek zorundayız. DirectX ve OpenGL gibi API ler her oyun programcısının mutlaka belgi sahibi olması gereken konulardan. Okuyun araştırın ve oyunların mantıklarını öğrenmeniz için marketlerden indirip yeni oyunlar oynayın GDC ve GGJ gibi konferanslara katılmaya çalışın.

Buradan sonrasını yazılım mühendisi Sayın Arman Kara’nın çevirisinden özetleyerek yazıyorum. Şimdi yavaştan başlayalım.

Tetris

Tetris oyun geliştiricisi olma yolunda yolculuğunuza başlamak için mükemmel bir oyun. Hazır asset’ler kullansanız da oyun programlamanın mantığını çözmeniz için farklı renkler ve bloklar için array’ler + matrisler mantığını kavrayacaksınız.
Tetris oyunun tüm bileşenleri hemen hemen ortak kullanılabilir diyebiliriz. Bir oyun döngüsü (oyun alanından çıkana kadar defalarca tekrarlama işlemine) sahiptir. Oyun döngüsü, girdi, çıktı process’ler, kazanmak / kaybetmek gibi oyunun unsurları vardır artı olarak da düşen tetris nesnelerinin update yani güncellenmesi gerekir.

Her oyun öğrenme sürecini ve her oyun yapımı aslında çok önemlidir. Bu oyunu tamamladığınızda size gelecekteki oyunlar hakkında ne kadar zor oyunlar yapabileceğiniz hakkında derin fikirler verecektir. Daha büyük projeler için fikir sahibi olacak nasıl başlamanız gerektiği konusunda düşünebilme yeteneği kazanacaksınız. 

Tetrisi bilmeyen yoktur ama yine tarihçesini merak ediyorsanız aşağıdaki videoya bir göz atın derim.

Breakout

Tetris bittikten sonra Breakout adı verilen oyuna geçiyoruz. Breakout, Atari tarafından ilk kez 1976 yılında yayınlanan bir arcade oyunudur

Breakout de benzer bir oyun ama Tetris de gerekli olandan çok daha ileri çarpışma (collision) algılamaları var.  Ayrıca seviyeler de ekleyerek zorluk sahnelerini ekleyebilirsiniz topun hızlanması veya blokların hareket ettirilmesi gibi.

Pac-Man

Artık bu oyunda bir takım yapılar fizik hareketleri, çarpışmalar, seviyeler, davranışlar, az da olsa oturmuş olacaktır. Bu oyunda düşman nesnesine  yapay zeka (AI) eklenecektir. Pac-Man oyunuyla birlikte inanılmaz gelişme katedeceksiniz. Farkında olmayabilirsiniz, ancak orijinal Pac-Man dört farklı hayalet düşmanlardan oluşan bir takım olarak sizi yenmeye çalışıyor. Saldırganın hedefi doğrudan siz olacaksınız ve sizi bulması için en kısa yolu takip ederek sizi bulmaya çalışacaktır.

Bu oyunda kullanacağınız en kısa mesafe bulma algoritması olan Pathfinding kullanılacaktır.  Pac-Man de kullandığınız haritayı daha karmaşik hale getirebilirsiniz. Kullandığınız algoritma yukarıda da bahsettiğimiz gibi en kısa yolu bularak size gelecektir.

Super Mario

Son oyunda ise Super Mario yapmanızı tavsiye ediyoruz. Bu oyunda yapmanız gereken bir platform, parallax (efekti sahnenin arka planda kaydırılması), düşmanların sağa ve sola hareket ettirilmesi, çarptığı takdirde ölmesi, ana karakterimizde ise atlamak, sağa ve sola kontrol ettirmek, puanlar almak ve düşmanları ile etkileşim kurmak. Bu oyunda da hazır sprite’lar kullanabilirsiniz. Geçmis oyunlarda yaptığımız oyunlardaki özellikler bu oyunda toplanmıştır.

Tüm bu örnekler içinde fizik hareketleri, yapay zeka, çarpışmalar, sesler, blok kontrolleri gibi detayları öğrenebilirsiniz. İçerik konusunda eksik veya hatalı bulduğunuz kısımlar varsa lütfen bildirin.

Ve site devamlılığı için lütfen beğendiğiniz içerikleri sosyal medya hesaplarınız da paylaşmayı unutmayın. Sağlıcakla kalın.

 

Yazıyı Değerlendirmek İster misiniz?
[Total: 1 Average: 5]
Art of CGI Yazar Notu:

“Oyun Geliştirmeye Nereden Başlamalı?” için bir cevap

  1. Umut Faruk Dilli dedi ki:

    Unreal Engine 4’te Blueprint ile görsel programlama yapılarak C++ ve benzeri programlama dilleri öğrenmeden oyun yapılabiliyor. Youtube kanalımda ücretsiz dersleri izleyerek öğrenebilirsiniz. Bu da benim kanalım;
    https://www.youtube.com/channel/UCtNgMWR0cgoO1qdyIsvf_Hw?view_as=subscriber
    (Para kazanmıyorum)

Bir cevap yazın

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