Bir oyun programcısı, tasarımcının vizyonunu alıp kullandığımız oyun motorunda çalışmasını sağlayan kişidir. Kwalee'de mobil oyun programlama ekibinde çalışıyorum, bizim için öncelikle Unity. Örneğin, tasarımcı zarın belirli bir şekilde yuvarlanmasını isterse, mantığı yönetecek script'i yazarım. Ayrıca oyun sanatçılarıyla işbirliği yaparak oyunlarımızın hem harika görünmesini hem de cihazda mükemmel performans elde etmesini sağlarız.
Bu blogda, Kwalee'de geçirdiğim beş yıl boyunca edindiğim temel bilgileri ve bir oyun programcısı olma konusunda tavsiyelerimi paylaşacağım. Kullandığımız bazı diller, araçlar ve prensipler, kariyer tavsiyelerim, ayrıca başlangıç ve ileri düzey ipuçları hakkında sizi bilgilendireceğim.
Bir Oyun Programcısı Ne Yapar?
Kodu yazar ve oyunun gerçeğe dönüşmesine yardımcı oluruz. Oyun tasarımcıları konseptleri oluştururken, oyun sanatçıları varlıkları oluşturur, bir programcı işlevsel, oynanabilir deneyimi yaratır. Oyunun performansını oluşturur ve optimize ederiz ve tespit edilen sorunları çözeriz.
Bir oyunun harika hissettirmesini ve yüksek performansla çalışmasını sağlarız. Bunu yapmak için, kodun kendisinin temiz ve genişletilebilir olmasını sağlamamız gerekiyor, bu düşündüğünüzden daha zordur. Tüm ekiplerimizde tutarlı kaliteyi korumak için kodlama standartları kullanıyoruz - bu standartlar, adlandırma standartları, biçimlendirme vb. içerebilir. Ancak, bazen işler her zaman bu kadar basit değildir ve zaman zaman işleri zamanında yapabilmek için kutunun dışında düşünmeniz gerekebilir.
Sorumluluklarımız arasında oyunun son kullanıcı donanımında iyi çalışmasını sağlamak da vardır. Örneğin, mobil oyunlarımızda, eski cihazların çok ısınmasını önlemek için sanatçılarla işbirliği yaparak çekim çağrılarını optimize etmemiz gerekiyor. Çekim çağrısı, Merkezi İşlem Birimi (CPU) tarafından Grafik İşlem Birimi'ne (GPU) ekranda bir nesne çizmesini söyleyen bir komuttur - GPU'ya doku, ağ veya gölgelendirici gibi grafik öğeleri çizmesini söyler. Çekim çağrılarının sayısını azaltmamız gerekiyor çünkü çok fazla olması kare hızı düşüşleri veya takılmalar gibi sorunlara neden olabilir. Bunu çözmenin birçok yolu vardır, ancak birden fazla nesneyi tek bir çekim çağrısına birleştirmek veya benzersiz doku ve malzeme sayısını azaltmak gibi şeyler yardımcı olabilir. Bu, mobil cihazlar için özellikle önemlidir çünkü piyasada çok sayıda farklı cihaz bulunmaktadır ve hepsinin farklı teknik özellikleri vardır.
Başlıca Oyun Programlama Dilleri Nelerdir?
Günlük olarak oyun programcıları olarak zamanımızın çoğunu bir dizi programlama dilinde script yazarak geçiriyoruz - sonuçta farklı türde yazılım geliştiricileriyiz. Seçilecek birçok dil var. Bazıları diğerlerinden daha kolay görünebilir, ancak birini öğrendikten ve ustalaştıktan sonra, diğerlerini de kesinlikle öğrenebilirsiniz - asıl zorluk kapıyı aralamaktır.
İşte en popüler oyun programlama dillerinden bazılarına bir giriş:
- C# - oyun geliştirmede yaygın olarak kullanılan çok yönlü ve popüler bir programlama dili. Eğer yeni başlayan biriyseniz, öğrenmesi en kolay olanlardan biridir. En iyi özelliklerinden biri otomatik çöp toplama - yani bellek tahsisini sizin için yönetir - bizim gibi yoğun programcılar için çok kullanışlı.
- C++ - aksine, bu yönetilmeyen bir dil, bu yüzden belleği manuel olarak tahsis etmeniz ve serbest bırakmanız gerekir, bu da karmaşıklık ve zorluk açısından daha büyük bir adım yapar. Ancak, daha büyük hız, kontrol ve performans sağlar.
- Java - C# gibi, Java kendi bellek yönetimine ve çöp toplama sistemine sahiptir, bu da geliştiricilerin belleği ayrıntılara fazla boğulmadan yönetmelerini kolaylaştırır. Web geliştirmede ve kurumsal uygulamalarda yaygın olarak kullanılır ve oyun geliştirme için en iyi seçenek olmayabilir (tartışılabilir), yine de ölçeklenebilir ve verimli uygulamalar oluşturmak için sağlam bir seçenektir.
- Swift - bu, iOS ve macOS için uygulamalar ve oyunlar oluşturmak için Apple'ın yerel dilidir. Ancak, bu, çapraz platform geliştirme için daha az kullanışlı olduğu anlamına gelir - çünkü mobil oyunlarımızı her zaman hem Android hem de iOS'ta yayınlamayı hedefliyoruz.
Nasıl Oyun Programcısı Olunur?
Oyun programcısı olmak için farklı yollar vardır. Benim yolum oldukça geleneksel - Staffordshire Üniversitesi'nde Oyun Tasarımı ve Programlama okudum. Başlangıçta oyun sanatı alanına gideceğimi düşünüyordum - çocukken sanata her zaman çok tutkuluydum, ayrıca üniversitedeki sanat modüllerinden gerçekten keyif aldım, ancak oradayken oyun oynamayı gerçekten sevdiğimi keşfettim. Tek bir yüksek poligonal model oluşturmak birkaç günümü alabilirdi, ancak bir ördeği uçurup patlatmak yarı zamanda yapabilirdim. Prototip oluşturmak, sonucu hemen önümde görmeme izin veriyor.
Ancak, oyun programlamanın güzelliği, geleneksel bir yol izlememiş olsanız bile çoğu insan için erişilebilir olmasıdır. Üniversitede 50 yaş üstü arkadaşlarım vardı - yeni bir şey deneyimlemek için asla geç değildir. Kwalee'de, çoğunlukla YouTube videoları aracılığıyla öğrenen ve eğlencesine bir oyun yapan birini bile işe aldık. Bugün yeni ve hevesli yetenekler için çok fazla fırsat var. Yeni öğrencilerin portföylerine baktığımızda, daha fazla şey başarmışlar. Harika yetenekler görüyoruz ve endüstride heyecan verici bir zaman.
Muhtemelen sormak istediğiniz bir soru - yapay zeka programlamayı bir kariyer olarak etkiler mi? Çok yararlı olabilir ve daha iyi hale geliyor. Bir şeyin açıklanmasına ihtiyacınız varsa veya bir problemde takılırsanız mükemmel. Hataları gidermek veya kodunuzu en son ChatGPT'ye yapıştırarak yeniden düzenlemek ('temizlemek') için kullanabilirsiniz. Ancak, portföyleri incelediğimizde yaptığınız ve gurur duyduğunuz çalışmayı görmek istiyoruz, yapay zeka kullanmak iyi, ancak onu kendi becerilerinizin yerine kullanmamaya çalışın.
Bir Oyun Programcısının Tipik Bir Günü Nasıldır?
Hayatımdayken bir örnek vereyim. Ben bir Lead Programcıyım (buna rüya işim diyorum), bu yüzden ellerimle çalışmak ve diğer programcıları yönetmek için harika bir karışım!
Dünyamda tipik bir gün, içeri girmek, bir latte almak, ardından QA ekibi için herhangi bir hata veya engelleyici olup olmadığını kontrol etmekle başlar. Ekiple kontrol edip, işlerini engelleyen bir şey yapmamı isteyen olup olmadığını görmek. Sonra müzik açılır ve görev listesi ortaya çıkar. İlerleme videolarını hızlı geri bildirim almak için slack üzerinden paylaşırız, aynı zamanda ekip üyelerimi desteklemek için 2-3 proje arasında gidip geliriz. Ayrıca programlamamızı daha verimli hale getirmek için paylaşılan sistemlere çok zaman harcıyoruz - hepsinin düzenli olarak bakımını yapmak, güncellemek ve onarmak gerekiyor.
Başlangıç Oyun Programlama Ipuçları
Eğer yeni başlıyorsanız ve tam teşekküllü bir programcı olmayı arzuluyorsanız, işte başlangıç ipuçlarım!
- Çevrimiçi olarak, YouTube'da öğrenilecek çok şey var ve bir mazeretiniz yok! Popüler motorlar ücretsiz ve kullanması çok eğlenceli!
- Spektrumun tam tersi ucunda, 30 yaşında olabilir ama "Design Patterns: Elements of Reusable Object-Oriented Software" adlı etkili kitabı, yani sözde Dörtlü Çete yazarları tarafından yazılmış, her gün programlamada kullandığımız oyun kalıplarının temellerini tanıtan kitabı okumaya çalışmalısınız.
- Kendi fikirleriniz olabilir, ancak basit başlayarak temellerle sağlam bir şekilde oturduğunuzdan emin olun.
- Ticari bir projeye bağlı olmadığınızda, istediğiniz kadar kod yazabilirsiniz, bu yüzden çılgın şeyler yaratırken çok eğlenin.
- Bir portföy oluşturmak gerçekten önemli (ve böylece işimi aldım). Ancak sadece aynı eski standart üniversite çalışmalarını yüklememeye dikkat edin, çünkü bunları birçok başvuruda göreceğiz. Yeniden şekillendirme ve daha fazla özellik ekleyerek ekstra bir gün harcamak bile sizi öne çıkarır.
- Kendi gerçek dünya oyununuzu oluşturmak da akıllıca bir fikirdir - Google Play'de bir oyun yayınlamak çok ucuzdur, bu yüzden işe alımcılara/yayıncılara/aileye/evcil hayvanlara telefonunuzda gösterebileceğiniz bir şey çıkarın. Hatta yılda birkaç bin dolar kazanabilir ve özel bir tam zamanlı iş kurulana kadar bir bonus kazanabilirsiniz! Veya kendi tam teşekküllü oyununuzu yapmaya ve bir yayıncıyla ortaklık kurmaya karar verebilirsiniz.
- Sadece programlama öğrenmeyin - sanat, tasarım, QA ve etkileşimde bulunacağınız diğer disiplinleri de öğrenin. Örneğin, QA yöntemlerini anlamak faydalıdır çünkü bir şeyin çalıştığını varsayma tuzağına düşebilirsiniz, ancak bir kullanıcı olarak oynamanız gerekir, kodu yazan biri olarak değil ve nasıl oynanması gerektiğini düşündüğünüz bir bakış açısına sahipsiniz. Yıkıcı olun, insanların rastgele yapabileceği şeyleri deneyin, rastgele düğmelere basın ve diğer tuhaf davranışlar sergileyin.
İLeri Düzey Programcı Ipuçları
İşte beni junior'dan programcıya, kıdeme ve daha sonra liderliğe taşıyan bazı ipuçları.
- Daha fazla öğrenmekten her zaman fayda sağlayabilirsiniz ve hatalar olmadan öğrenemeyeceğimizi unutmayın!
- Bir şey hakkında gerçekten tutkuluysanız - daha uzmanlaşabilirsiniz. Örneğin, gölgelendirici ve render boru hatlarıyla oynamayı seviyorsanız, karmaşık görsel efektler işlemek için grafik gölgelendiricilerini nasıl kullanacağınızı öğrenin ve performansı optimize etmek veya bazı harika efektler oluşturmak için render boru hatlarını kullanın.
- Çok havalı bir şey yapabilir, karmaşık bir sistem, bir varlık mağazasına yükleyebilir ve gelişmiş çalışmanızı sergileyebilirsiniz. Sözleşmeniz izin veriyorsa, bir tür programcı olarak bir niş oluşturabilirsiniz, örneğin oyun programcısı, sunucu programcısı, grafik programcısı veya çok oyunculu programcı.
- Alternatif olarak, benim gibi yönetim yoluna gidebilir ve insanlara mentorluk yapabilirsiniz. İşimde ilerleme taktiğim yeni sorumlulukları üstlenmek oldu. İlk önce küçük şeyleri geliştirerek başladım, yani küçük iş akışı değişiklikleri.. Ardından, yeni projeler oluştururken zaman kazandırmak için şablonlar kullanarak süreçleri daha kolay hale getirdim. Sonra mentorluk ve yönetime ilgi duydum, bu da bana daha fazla güven kazandırdı ve şimdi akran değerlendirmelerine, kod incelemelerine katılıyorum, atölye çalışmaları düzenliyorum ve projelerde ekipleri yönetiyorum.
Bir ekibin parçası olarak veya bir yönetici olarak çalışırken, yapıcı eleştiri vermek kadar övücü sözler vermek de önemlidir. Kod inceleme yaparken, insanları motive etmek iyidir!
Oyun Programlamanın Ana Ilkeleri Nelerdir?
Oyun programlamasını ele alan bir blogda mutlaka yer alması gereken bazı anahtar konular vardır. Bunlar, üzerinde düşündüğümüz en önemli şeylerdir.
Kaynak Kontrolü/Sürüm Kontrolü
Oyunlardaki kayıt noktaları gibi, proje geliştirmede de kayıt noktaları vardır. Bunlar, projenin genel deposu olarak hizmet eder ve üç veya dört programcının bir sistem üzerinde eşzamanlı çalışmasını, bir değişiklik yapmasını ve sunucuya göndermesini sağlar. Bu değişiklikleri takip etmemize ve bir şey kırılırsa kolayca geri almamıza olanak tanır. İki geliştirici aynı dosyada çalışırsa, o dosya birleştirme parçası olur, çatışmalar varsa manuel olarak çözebilir veya bir bireyin değişikliklerini uygulamak için seçebiliriz. Bu, Unity içinde Prefabs veya Scenes kullanırken sık sık gerçekleşecektir.
Bu terimler bazen örtüşür, ancak genellikle kaynak kontrolü kod ile ilgilenirken, sürüm kontrolü tüm proje dosyalarını, varlıkları ve belgeleri içerir.
Kaynak Kontrolü kullanmaya başladığınızda, başlamak biraz korkutucu gelebilir, çok bunaltıcı görünebilir ve çatışmalarla karşılaştığınızda ne yapacağınızdan emin olamayabilirsiniz. Ancak sürüm kontrolünün doğası, zaman içinde anları kaydetmenize yardımcı olur, bu yüzden sık sık güncelleyip ayrıntılı taahhüt mesajları kullanıyorsanız, son derece kullanışlı ve güvenlidir. Birden çok noktaya geri dönebilir, birden çok dal oluşturabilirsiniz vb. Bunu geliştiricilerin güvenlik ağı olarak düşünün, böylece Pixar'ın Toy Story 2'sinin bir sürümü gibi - yanlışlıkla silinmiş ve ardından Teknik Direktörlerinin evindeki bir sabit diskten kurtarılmış - yerine her şey sunucuda güvenli bir şekilde saklanır.
Nesne Yönelimli Programlama
Bu, Kwalee'de kullandığımız ana programlama türüdür. Gerçek şeyleri veya soyut kavramları temsil etmek için nesneleri kullanır ve kod tabanını, gerçek dünyada nesnelerle nasıl gördüğümüz ve etkileşimde bulunduğumuza benzer prensipler kullanarak düzenlemeyi amaçlar. Karmaşık sistemleri, tekrar kullanılabilir, ölçeklenebilir ve daha kolay bakımı sağlanabilir ayrı sınıflar halinde düzenleyerek yönetmeye yardımcı olur.
Tabii ki, bu konuda iyi olup olmadığı konusunda tartışmalar var. En yüksek performans gösteren değilken, iyi çalışır. Dillerde olduğu gibi, her birinin kendi artıları ve eksileri vardır ve başlamak için bir tane öğrenmeli ve dillerin ve derleyicilerin (insan kodunu makine koduna çeviren çevirmenler) nasıl çalıştığını anlamalısınız. Ayrıca, fonksiyonel programlama gibi diğer türleri de düşünebilirsiniz, bu daha çok matematik gibi, mantık programlama, gerçekler ve kurallar kullanır veya adım adım veri kullanan prosedürel programlama.
Programlama Kalıpları
Bunlar harika derecede kullanışlı şeyler - yazılım tasarımında karşılaşacağınız yaygın sorunlara yardımcı olabilecek yeniden kullanılabilir çözümler. Size bir problemi çözmek için bir şablon verir, böylece her seferinde tekerleği yeniden icat etmenize gerek kalmaz ve kanıtlanmış çözümleri takip edebilirsiniz.
Örneğin, Singleton tasarım kalıbı, tüm oyun boyunca bir sınıfın, örneğin bir oyun ayarları yöneticisinin, yalnızca bir örneğinin olmasını sağlar ve buna küresel bir erişim noktası sağlar. Bu kalıbın kodu, SettingsManager sınıfının yalnızca bir örneğinin var olmasını sağlar, böylece her ihtiyaç duyduğunuzda yeniden oluşturmanız veya çoğaltmanız gerekmez.
Ayrıca, nesneleri daha organize ve esnek bir şekilde oluşturmanıza yardımcı olabilecek Fabrika Kalıbı da vardır. Giriş parametrelerine dayalı olarak belirli türde nesneler oluşturma yöntemlerini tanımlayabilir, benzer türde daha fazla nesne oluşturmayı kolaylaştırabilir ve her seferinde sıfırdan başlamanıza gerek kalmaz.
Umarım bu blog, oyun programlama konusunda size bir tat vermiştir, ister bu alanda yeni olun ister deneyimli bir programcı olun! Çalışkan ama eğlenceli bir insan iseniz, ekibimize katılmak için Kwalee kariyerleri hakkında daha fazla bilgi edinebilirsiniz. Aksi takdirde, mobil oyunlarımız veya yayıncılık hakkında bilgi alabilir ve bir geliştirici ve yayıncı olarak neleri yayınladığımızı daha iyi tanıyabilirsiniz.








