Oyun Yapmak İsteyenlere Tavsiyeler

Oyun Yapmak İsteyenlere Tavsiyeler

Hangi oyun motoru seçilir, ufak bir oyun nasıl yapılır kısımlarını geçiyorum. Yüzlerce güzel kaynak var. Naçizane taviyelerim, oyun yapmaya başlayan, bir şekilde "build alıp" hedef platformda çalıştırmış bağımsız, çoğu zaman yalnız geliştiriciler için.

Tavsiyeleri, uzmanından değil, mağdurundan gözüyle okumanızı öneririm. Yazıyı kısa tutup, ara ara aklıma gelenleri microblog şeklinde yayınlayacağım. Bu yazıya zorlama 100 tavsiye bulmak yerine, bloga Twitter muamalesi yapacağım.

Konudan sapıp, derinlere inip oyun geliştirme ile ilgili travmalarımla tanışmaya da hazır olunuz :)

Editörü açtığınızda, ne yapacağınızla ilgili bir planınız olsun.

Odaklanma problemim var. Editörü açtığımda, son yaptıklarıma bakarken kimseyi kolay kolay rahatsız etmeyecek, ya da herhangi bir AAA oyunda bile rahatlıkla denk gelebileceğiniz ufak bir sorun için saatler harcayabilirim. Yürürken karakterin ayakları yere tam basmıyor mu? Hoşgeldin üzerine bir hafta daha harcayacağım task.

Baldur's Gate 3 oynarken farkettim, benzeri NPC karakterlerde var. Gerçek anlamda çözmesi çok çok zor bir problem bu. Ayak hareketleri, karakterin hızına uysa, bu sefer karakteri yürümesi gereken yolda tutmak zorlaşıyor. Yolda tutmaya özen gösterseniz, yoldan çıkınca olması gereken yere gitmek için hedef noktasının etrafında dönmeye başlıyor sonsuza dek. Halbuki, animasyonlar çok da uymasın deyip geçilebiliriz.

Konuya dönersek, televizyonu açıp ne izlesem demek gibi bu da. Açtıktan sonra, bir saat dizi ve film önerileri arasında dolaşan biriyseniz, aynısının oyun geliştirirken de yaşama ihtimaliniz yüksek.

Plan oluşturun, bir geliştirme oturumunu kusur çözmek için mi yoksa bir özelliği bitirmek için mi kullanacağınıza karar verin. Sahneyi açıp kamerayla dolaşmayın.

O sahneyi kaybedeceksiniz, backup da kurtarmayacak. Hazırlıklı olun.

Bu Unity'de karşılaştığım bir durum. Nesneye ait ayarları, nesne üzerinde değil, sahne üzerinde tutan kitaplıklar var. Her şeyi silip tekrar oluştursanız bile sahneyi çalışır hale getiremediğiniz oluyor. Bazen zamanla ortaya çıkan editör hataları, bazen de kötü pratiklerle geliştirilmiş kitaplıklar/assetler yüzünden oluyor bu.

Sürüm kontrol sistemi ya da yedeklerle de düzeltemeyebiliyorsunuz bunu, çünkü editörle orjinal sahneyi açtığınızda editörün ya da asset pack'in sahneyi bozuk haline döndürüp dördürmeyeceğini bilemezsiniz. Editör hatalarının giderildiği bir sürümle açıp kurtulma şansınız var, ama umarım beklediğiniz o bugfix çabuk gelir...

Çözüm, sahneleri kompozisyon oluşturma için bir kanvas olarak düşünmek, ve geliştirme yaparken sahne odaklı değil, Prefab ve ScriptableObject odaklı bir strateji izlemek.

Kocaman bir haritam, üzerinde birkaç terrain, binalar, karakterler var. Hemen hemen hepsi ayrı parçalar halinde bir arada çalışabilir durumda. Bunları aynı sahneye koyduğumda, hepsini bir sebeple birbirine bağlamam gerekiyor.

Kapılar mesela. Kapıların durumu yolun açık olup olmadığıyla alakalı. Navigation sistemine bağlamam gerekiyor. Normal şartlar altında, kapının üzerinde çalışan bir Script'i, navigasyon haritasını güncelleyecek şekilde başka bir Script'e bağladan kapıları çalışır hale getirmem mümkün değil.

Halbuki, bu tür bağlantıları otomatik hale getirmek, Event temelli, ScriptableObject kullanan, sürükle bırak yapıldığı gibi kendini gerekli Component'lere iliştiren bir sistem kurmak zor değil. Böyle bir iş için 200 satır yazacağımı sanmıyorum. Lakin, sahneyi sıfırdan oluştururken çok daha az vakit harcamam gerektiğinden eminim.

Editör hatalarıyla yaşamayı öğrenin.

Bazı editör hataları yıllarca çözülemeyebilir, bazılarını çok geç farkedebilirsiniz ve farklı bir sürüme geçmek ya da farklı bir sistem kullanmak için geç kalmış olabilirsiniz.

Hatanın nasıl etrafından dolaşabileceğinizi düşünün. Editör arayüzünü kullanmak yerine API kullanmak işe yarıyor mu, ya da bazı işleri tamamen ayrı bir proje içinde yapıp Prefab'ları orjinal projeye aktarmak mümkün mü bakılabilir.

Aynı editör hatasından muzdarip insanları bulmak, onlardan workaround'ları öğrenmek ve çözümleri almak da iyi bir strateji.

Editör araçları yazın.

Haritaya yeni bir alan eklediğimde, ana yoldan o bölgeye bir patika çekiyorum. Patikanın bitki örtüsünü azaltması için oradaki bitkileri silmem, ya da ilerde hiç oluşmamasını sağlamam; sonra bu yeni yolun yürünebilir olduğunu navigasyon sistemine bildirmem gerekiyor.

Yapmam gereken işler arttıkça, unutma ihtimalim de artıyor ve bunu oynama testi yapmadan farketmem zorlaşıyor. Büyük zaman kaybı.

Sırtımı bu problemi çözen bir asset sistemine dayamak mümkün, geliştiricisinin önerdiği level-design pratiklerini uygulamak yapılması gereken manuel işleri azaltmayı sağlayabilir ama geliştiricisinin, sizin tüm dertlerinizi çözdüğü bir asset yok.

Elle yaptığınız her işi, Editor olarak tagli, asıl uygulamaya hiç girmeyecek ancak geliştirme aşamasında kullanacağınız bir GameObject içine koyabilir, ya da Component'ler kodlayabilirsiniz.

Yolları Spline ile çiziyorum, oyuncunun bu yol üzerinde koşabilmesi için belirli aralıklarla "waypoint" yerleştirmem, sonra "Pathfinding" sistemine haritayı tekrar taratmam gerekiyor. Hepsi, editöre kod yazarak çözülebilir adımlar.

Ya da, terrain üzerinde yeni sürüm Navmesh kullanıyorsanız ağaçların içinden geçebilmenizi sağlayan garip bir hata olduğunun farkındasınızdır. Önce her ağaç için, gerekli pozisyonlarda Collider'lar üretip, sonra Navmesh taraması yapıp, sonra yarattığınız geçici Collider'ları silerek bu problemi çözebilirsiniz.

İşleri toplu halde yapın. Her nesneye bir script eklemek yerine, birbirine benzeyen tüm nesneleri toplu halde yöneten tek script size zaman kazandırır.

Ki, zaman, daha yüksek FPS olarak döner. Bir odada 100 tane tuzak varsa, her birini bağımsız scriptler ile hareket ettirmek yerine, hepsini yöneten tek bir script çok daha hızlı çalışır.

Network kodu yazarken farkettiğim bir şeydi bu. Haritadaki onlarca kullanıcının hareketlerini tek tek göndermek, hem tutarsızlık yaratır hem de fazla bantgenişliği kullanır. Periyodik olarak tüm nesnelerin konumlarını toplamak, bunları tek parça halinde diğer oyunculara göndermek tutarlı FPS ve akıl sağlığı için elzem.

Tek kullanıcılı oyunlardaysa, oyundaki her etkileşim kurulabilir nesnenin ayrı uygulamalar halinde çalışması, ortamdaki herkesin aynı anda konuşması gibi. Düzensiz. Nesnelerin birbiriyle iletişim kurması gereken durumlarda, her birinin ayrı bireyler olarak çalışması gürültüyü dayanılmaz bir hale getirebilir. Hem geliştirirken, hem de sınırlı kaynaklı platformlarda çalıştırırken.

Sistemler, onlarca bireysel karar noktasından daha efektiftir.

MMO geliştirmeyin. Bu bir tuzak.

Rakip çok, yoksa geliştirebileceğinize inanıyorum ben. Ziyan olmasın emekleriniz, basit oyunlar yapın, piyasanın basit oyunlara ihtiaycı var.

Mastodon