Genel bakış
Oyun geliştirmeye ilk başladığımda elimde büyük bir ekip, güçlü bir bilgisayar ya da profesyonel bir plan yoktu. Sadece bir şey üretme isteğim vardı.
Yıllar içinde Unity, C#, multiplayer sistemler, Firebase, Photon, yapay zekâ araçları, 3D modelleme, oyun tasarımı ve performans optimizasyonu gibi birçok farklı alanla uğraştım. Kimi zaman küçük mobil oyunlar yaptım, kimi zaman multiplayer FPS geliştirdim, kimi zaman futbol sistemleri, simülasyonlar ve farklı oyun mekanikleri üzerinde çalıştım.
Bu süreçte öğrendiğim en önemli şeylerden biri şu oldu:
Oyun geliştirmek sadece kod yazmak değildir.
Bir oyunu gerçekten ortaya çıkarmak için yazılım, tasarım, kullanıcı deneyimi, performans, ses, görsel kalite, test, pazarlama ve hatta psikoloji aynı noktada buluşuyor.
Küçük Başlamak, Büyük Düşünmek
Yeni başlayanların yaptığı en büyük hatalardan biri ilk projede devasa bir oyun yapmaya çalışmak.
Ben de yıllar içinde birçok kez bunu deneyimledim.
Bir fikir geliyor ve hemen içine şunları eklemek istiyorsun:
- multiplayer
- açık dünya
- envanter sistemi
- görev sistemi
- ekonomi
- yapay zekâ
- gelişmiş grafikler
- onlarca harita
- yüzlerce özellik
Sonuçta proje büyüyor ama tamamlanmıyor.
Bu yüzden artık projelere farklı bakıyorum.
Önce oyunun gerçekten eğlenceli olan temel mekanizmasını çalıştırmaya odaklanıyorum. Eğer ana oynanış çalışmıyorsa, üzerine eklenen yüz özellik oyunu kurtarmıyor.
Bir futbol oyununda şut hissi kötüyse menünün ne kadar güzel olduğunun pek önemi yok.
Bir FPS oyununda ateş etme hissi kötü ise onlarca silah eklemek çözüm değil.
Bir simülasyon oyununda temel döngü eğlenceli değilse büyük bir harita da oyunu iyi yapmıyor.
Kod Yazmak Yetmiyor
Unity ile yıllardır çalışırken en çok fark ettiğim şeylerden biri de şu oldu:
Bir sistemi çalıştırmak ile iyi çalıştırmak arasında ciddi fark var.
Örneğin bir kaleciyi topa doğru hareket ettirmek birkaç satır kodla yapılabilir.
Ama kalecinin:
- doğru anda tepki vermesi,
- gerçekçi şekilde sağa veya sola atlaması,
- kaleden çıkmaması,
- topun konumunu tahmin etmesi,
- animasyonla fizik sisteminin uyumlu çalışması
işin asıl zor kısmıdır.
Aynı şey multiplayer sistemlerde de geçerli.
Bir oyuncuyu Photon ile odaya sokmak kolaydır. Ama bağlantı kopması, senkronizasyon, gecikme, takım sistemi, skor tablosu, botlar ve güvenlik devreye girdiğinde iş çok daha karmaşık hale gelir.
Bitmeyen Projelerden Öğrendiklerim
Oyun geliştiren herkesin bilgisayarında muhtemelen yarım kalmış birkaç proje vardır.
Benim de oldu.
Eskiden bunu başarısızlık gibi görüyordum.
Artık öyle bakmıyorum.
Her yarım proje bana başka bir şey öğretti.
Bir proje networking öğretti.
Bir proje fizik sistemlerini.
Bir proje kullanıcı arayüzünü.
Bir diğeri performans optimizasyonunu.
Bazıları da bana doğrudan şu dersi verdi:
Bu proje yapılmamalı.
Bu da aslında önemli bir kazanım.
Çünkü zamanla hangi fikrin gerçekten geliştirilmeye değer olduğunu, hangisinin sadece ilk anda güzel göründüğünü daha hızlı anlayabiliyorsun.
Tek Başına Oyun Geliştirmenin Zorluğu
Solo geliştirici olduğunda aynı gün içerisinde yazılımcı, tasarımcı, tester, proje yöneticisi ve bazen pazarlamacı olmak zorundasın.
Bir gün karakter hareket sistemi yazıyorsun.
Ertesi gün UI düzeltiyorsun.
Sonra Steam sayfasını düşünüyorsun.
Ardından performans problemi çıkıyor ve birkaç saat boyunca neden 20 FPS düştüğünü araştırıyorsun.
Bence solo geliştirmenin en zor tarafı kod değil.
Odaklanmak.
Çünkü her şeyi yapabileceğini düşündüğünde her şeyi aynı anda yapmaya çalışmak çok kolay.
Son zamanlarda kendi projelerimde daha çok şu mantığı uyguluyorum:
Az özellik, daha yüksek kalite.
On tane yarım sistem yerine birkaç tane gerçekten çalışan sistem.
Yapay Zekâ Oyun Geliştirmeyi Değiştiriyor
Son yıllarda geliştirme sürecimin önemli parçalarından biri de yapay zekâ araçları oldu.
Ancak burada önemli bir ayrım olduğunu düşünüyorum.
Yapay zekâ sizin yerinize oyun geliştirici olmuyor.
Doğru kullanıldığında ise geliştirme hızınızı ciddi şekilde artırabiliyor.
Kod incelemek, hata bulmak, alternatif mimariler düşünmek, dokümantasyon hazırlamak veya tekrar eden işleri hızlandırmak konusunda oldukça faydalı.
Fakat sistemin nasıl çalışması gerektiğini bilmiyorsanız, yapay zekânın verdiği kodun doğru olup olmadığını da anlayamazsınız.
Bu yüzden temel yazılım bilgisinin hâlâ çok önemli olduğunu düşünüyorum.
Projeden Ürüne Geçiş
Bir başka önemli fark da proje ile ürün arasındaki fark.
Bir oyunun bilgisayarınızda çalışması onu bitmiş bir ürün yapmıyor.
Ürün haline gelmesi için:
- kullanıcı deneyimi,
- hata yönetimi,
- performans,
- farklı ekran çözünürlükleri,
- kayıt sistemi,
- ayarlar,
- dağıtım,
- geri bildirim,
- güncelleme süreci
gibi birçok detay gerekiyor.
Kendi projelerimde artık sadece “çalışıyor mu?” diye bakmamaya çalışıyorum.
Şunu soruyorum:
Bunu hiç tanımadığım biri açsa anlayabilir mi?
Bu soru birçok şeyi değiştiriyor.
Oyun Geliştirmeye Başlayacaklara
Bugün sıfırdan başlayacak olsaydım kendime birkaç tavsiye verirdim:
İlk oyununuzu hayalinizdeki oyun yapmaya çalışmayın.
Küçük bir oyun bitirin.
Sonra bir tane daha.
Kodunuzu sürekli yeniden yazmak yerine önce çalışan bir şey ortaya çıkarın.
Başka oyunları sadece oynamayın, analiz edin.
“Neden bu mekanik eğlenceli?” diye düşünün.
Projelerinizi insanlara gösterin.
Eleştiri alın.
Ve en önemlisi:
Bitirmeyi öğrenin.
Çünkü oyun geliştirmede en değerli yeteneklerden biri sadece iyi kod yazmak değil, başladığınız şeyi gerçekten yayınlayabilmektir.
Ben de hâlâ öğrenmeye, yeni sistemler geliştirmeye, bazı projeleri yeniden yapmaya ve daha iyi oyunlar üretmeye devam ediyorum.
Çünkü oyun geliştirmenin en güzel tarafı da burada.
Hiçbir zaman gerçekten “tamam, artık her şeyi biliyorum” diyemiyorsunuz.
Her proje size yeniden bir şey öğretiyor.
