Bir oyun programcısı, tasarımcının vizyonunu alıp gerçekten kullandığımız oyun motorunda çalışmasını sağlayan kişidir. Ben Kwalee'de mobil oyun programlama ekibinde çalışıyorum, bu yüzden bizim için başlıca Unity. Örneğin, tasarımcı zarı belirli bir şekilde yuvarlamak isterse, bu mantığı yönetecek scripti ben yazarım. Ayrıca oyun sanatçılarıyla çalışarak oyunlarımızın hem harika görünmesini hem de cihaz üzerinde yüksek performans göstermesini sağlarız.
Bu blogda, beş yıllık Kwalee'de çalışma deneyimime dayanarak, oyun programcısı olmakla ilgili önemli içgörüleri ve tavsiyeleri paylaşacağım. Kullandığımız diller, araçlar ve prensipler hakkında size rehberlik edeceğim, kariyer tavsiyem ve yeni başlayanlar ile ileri düzey ipuçlarım hakkında bilgilendirmelerde bulunacağım.
Oyun Programcısı Ne Yapar?
Kodu yazarız ve oyunun gerçekleşmesine yardımcı oluruz. Oyun tasarımcıları konseptleri, oyun sanatçıları varlıkları yaratırken, bir programcı işlevsel, oynanabilir deneyimi yaratır. Oyunun performansını optimize eder ve tanımlanan sorunları gideririz.
Bir oyunun harika hissettirmesini ve yüksek performansla çalışmasını sağlarız. Bunu yapmak için kodun temiz ve genişletilebilir olmasını sağlamak zorundayız, bu düşündüğünüzden daha zor. Tüm ekiplerimizde tutarlı kaliteyi korumak için kodlama standartları kullanıyoruz - bu, isimlendirme standartları, biçimlendirme vb. içerebilen bir dokümandır. Ancak bazen işler her zaman olduğu gibi kolay olmayabilir ve zamanında işleri bitirmek için kutunun dışında düşünmeniz gerekebilir.
Bizim görevlerimiz ayrıca oyunun son kullanıcı donanımında iyi çalışmasını sağlamayı da içerir. Örneğin, mobil oyunlarımızda, eski cihazların çok fazla ısınmasını önlemek zorundayız, bu yüzden sanatçılarla birlikte çizim çağrılarını optimize etmek için çalışıyoruz. Çizim çağrısı, Merkezi İşlem Birimi (CPU) tarafından Grafik İşleme Birimi (GPU) 'ye ekranda bir nesnenin render edilmesi için gönderilen bir komuttur - bu GPU'ya dokular, örgüler veya gölgelendiriciler gibi grafiksel öğeleri çizmeyi söyler. Oyunumuzda bu çizim çağrısının sayısını en aza indirmemiz gerekiyor çünkü çok fazla olması, kare hızı düşüşleri veya kesintiler gibi sorunlara neden olabilir. Bunun birçok çözümü vardır, ancak birçok nesneyi tek bir çizim çağrısında birleştirmek veya benzersiz dokuların ve materyallerin sayısını azaltmak gibi şeyler yardımcı olabilir. Özellikle mobil için önemlidir çünkü piyasada çok farklı teknik özelliklere sahip birçok cihaz var.
Başlıca Oyun Programlama Dilleri Nelerdir?
Günlük oyun programcıları olarak zamanımızın çoğunu bir dizi programlama diliyle kodlama yaparak geçiriyoruz - biz nihayetinde farklı bir tür yazılım geliştiricileriz. Seçilecek birçok dil var. Bazıları diğerlerinden daha kolay gibi görünüyor, ancak bir dili öğrendikten ve ustalaştıktan sonra diğerlerini kesinlikle öğrenebilirsiniz - esas zorluk kapıya adım atmaktı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 dilidir. Başlangıç seviyesinde iseniz öğrenilmesi en kolaylardan biridir. En iyi özelliklerinden biri otomatik bellek yönetimi - bu, bellek tahsisini sizin için yönetir - bizim gibi meşgul programcılar için çok kullanışlıdır.
- C++ - buna karşılık, bu yönetilmeyen bir dil olup, belleği elle tahsis edip almanız gerekir, bu da karmaşıklık ve zorlukta oldukça büyük bir adım atmayı gerektirir. Ancak, daha fazla hız, kontrol ve performans sağlar.
- Java - C# gibi, Java da kendi bellek yönetimi ve çöp toplama sistemine sahiptir, bu da geliştiricilerin bellekle ilgili detaylara fazla boğulmadan başa çıkmasını kolaylaştırır. Web geliştirmede ve kurumsal uygulamalarda yaygın olarak kullanılır ve (tartışmalı olsa da) oyun geliştirme için en iyi seçim olmayabilir, ancak ölçeklenebilir ve verimli uygulamalar oluşturmak için sağlam bir seçenek olmaya devam etmektedir.
- Swift - bu, iOS ve macOS için uygulama ve oyun geliştirmek için Apple'ın yerel dilidir. Ancak, bu durum onu çapraz platform geliştirme için daha az kullanışlı kılar - çünkü mobil oyunlarımızı hem Android hem de iOS'ta yayınlamayı hedefliyoruz.
Oyun Programcısı Nasıl Olunur?
Oyun programcısı olmak için birkaç farklı yol vardır. Benim yolum oldukça geleneksel - University of Staffordshire'da Oyun Tasarımı ve Programlama okudum. Başlangıçta, oyun sanatına yönelmeyi düşündüm, çünkü çocukken sanata çok tutkuyla bağlıydım ve üniversitede sanat modüllerini gerçekten çok sevmiştim, ancak oradayken gerçekten oyun oynamayı nasıl geliştireceğimi öğrendim. Yüksek poligonlu bir modeli birkaç günde oluşturmak gerekebilir, ancak bir ördeği uçurup patlatmak için yarı sürede yapabilirim. Prototipleme, sonucu hemen önümde görmemi sağladı.
Ancak, oyunları programlamanın güzelliği, geleneksel bir yol izlemeseniz bile çoğu kişinin erişebilir olmasıdır. Üniversitede 50 yaş üstü arkadaşlarım vardı - yeni bir şey denemek için hiçbir zaman geç değildir. Kwalee'de, esas olarak YouTube videoları üzerinden öğrenmiş ve kendi eğlencesine oyun yapmış birini bile işe aldık. Bugün hevesli ve yeni yetenekler için birçok fırsat var. Daha yeni öğrencilerin portfolyolarına baktığımızda, çok daha fazla şeyi başarmış olduklarını görüyoruz. Harika yetenekler geliyor ve bu sektörde heyecan verici bir zaman.
Muhtemelen sormak istediğiniz bir soru - AI, programlama kariyerini etkileyecek mi? Çok yararlı olabilir ve gittikçe daha da iyi hale geliyor. Eğer bir şeyi açıklamaya veya bir soruna takıldıysanız mükemmel. Hataları düzeltmek veya kodunuzu yeniden düzenlemek için en son ChatGPT'ye yapıştırabilirsiniz ('temizlemek' için). Ancak, bir portfolyo görünce, yaptığınız ve gurur duyduğunuz işleri görmek istiyoruz, AI kullanmakta bir sakınca yok, ancak kendi becerilerinizin yerine kullanmamaya çalışın.
Bir Oyun Programcısının Tipik Günü Nasıldır?
Hayatım üzerine bir örnek vereyim. Ben Baş Programcıyım (bu benim hayalimdeki iş olarak adlandırdığım şey) bu yüzden hem yapılacak işler hem de diğer programcıları yönetme ile harika bir karışımım var!
Dünyamda tipik bir gün, içeri girmek, bir latte almak, ardından QA ekibi için herhangi bir hata veya engelleyici kontrol etmekle başlar. Ekipten biri çalışmasını engelleyen bir şey yapmak isteyip istemediğimi kontrol ederim. Ardından, müzik başlar ve görev listesi çıkar. Geri bildirim almak amacıyla slack üzerinden ilerleme videoları paylaşırız, aynı zamanda ekibimin üyelerini desteklemek için 2–3 proje arasında gidip geliriz. Programlamamızı daha verimli hale getirecek ortak sistemlere yatırım yapmak için de epey zaman harcıyoruz - her şeyin sorunsuz çalışması için bunların düzenli olarak bakımının yapılması, güncellenmesi ve düzeltilmesi gerekiyor.
Başlangıç Seviyesi Oyun Programlama Ipuçları
Eğer başlangıç yapıyor ve tam teşekküllü bir programcı olmayı hedefliyorsanız, işte başlangıç ipuçlarım!
- Öğrenilecek çok şey var, YouTube'da ve örnek oyunlarla dolu, öğrenmemek için hiçbir bahaneniz yok! Popüler motorlar ücretsiz ve kullanması çok eğlenceli!
- Tamamen zıt uçta, 30 yaşında olabilir ama "Design Patterns: Elements of Reusable Object-Oriented Software" adlı kitap, günlük programlamamızda kullandığımız oyun desenlerinin temellerini tanıtan ünlü Gang of Four yazarları tarafından yazılan kitabı denemelisiniz.
- Kendi fikirleriniz olabilir ama temel bilgileri almanız için basit başlamanıza emin olun.
- Ticari bir projeye bağlı olmadığınızda, istediğiniz kadar kod yazabilirsiniz, bu yüzden çılgın şeyler yaratırken çok fazla eğlenin.
- Bir portföy oluşturmak gerçekten çok önemli (ve işimi bu şekilde aldım). Ancak, aynı eski üniversite işlerini yüklememeye dikkat edin, çünkü bu tür başvuruları birçok kez göreceğiz. Yeniden skin yaratmak ve daha fazla özellik eklemek için bir gün bile harcamak bile fark yaratacaktır.
- Kendi gerçek dünya oyununuzu yaratmak da akıllıca bir fikir - Google Play'de bir oyun çıkarmak çok ucuz, bu yüzden işe alımcılar/yayıncılar/aile/petlerinize telefonunuzda gösterebileceğiniz bir şey yayınlayın. Önünüzde özel tam zamanlı bir iş kurana kadar yılda birkaç bin dolar bile kazanabilirsiniz, bu bir bonus! Ya da kendi tam kapsamlı oyununuzu yapıp bir yayıncıyla ortaklık kurmaya yönlendirilmiş olabilirsiniz.
- Yalnızca programlama hakkında değil, sanat, tasarım, QA ve etkileşimde bulunacağınız diğer disiplinler hakkında da bilgi edinin. Örneğin, QA yöntemlerini anlamak önemlidir çünkü bir şeyin çalıştığını varsaymak tuzağına düşebilirsiniz, ancak bir kullanıcı olarak oynamanız gerekiyor, kodu yazan kişi ve 'nasıl oynanması gerektiği' konusunda belirli bir görüşe sahip olarak değil. Yıkıcı olun, insanların yapabileceği rastgele şeyleri deneyin, rastgele düğmelere basın ve diğer garip davranışları.
İLeri Düzey Programcı Ipuçları
İşte beni stajyerden programcıya, kıdemliye ve liderliğe götüren bazı ipuçları.
- Daima daha fazla öğrenmeden faydalanabilir ve hatalar olmadan öğrenemeyeceğimizi unutmayın!
- Gerçekten bir şeye tutkuyla bağlıysanız - daha özel bir hale gelebilirsiniz. Örneğin, gölgelendiriciler ve render boru hatlarıyla oynamayı seviyorsanız, grafik gölgelendiricilerini kullanmayı öğrenerek karmaşık görsel efektler için yeteneklerinizi genişletin ve render boru hatlarını kullanarak performansı optimize edin veya harika efektler oluşturun.
- Gerçekten havalı bir şey yapabilir, karmaşık bir sistemi geliştirebilir, eğer sözleşmenizde olmasına izin veriliyorsa bunu bir varlık mağazasına yükleyebilir ve gelişmiş çalışmanızı sergileyebilirsiniz. Özel bir tür programcı olarak bir niş geliştirebilirsiniz, örneğin bir oyun programcısı, sunucu programcısı, grafik programcısı veya çok oyunculu programcı.
- Alternatif olarak, benim gibi yönetim yoluna gidebilirsiniz ve insanları eğitebilirsiniz. Kariyerimi ilerletmek için kullandığım taktik, yeni sorumlulukları özümsemek oldu. Öncelikle, daha küçük şeyleri iyileştirmeye başladım, yani küçük iş akışı değişiklikleri. Ardından, yeni projeler oluştururken zamandan tasarruf sağlamak için şablonları kullanarak süreçleri kolaylaştırdım. Daha sonra mentorluk ve yönetimden zevk aldım, bu da bana daha fazla güven verdi ve şimdi akran görüşmelerine, kod incelemelerine, atölye çalışmalarına ve projelerde ekip liderliğine katılıyorum.
Bir ekibin parçası olarak çalışıyor ya da yönetici olarak çalışıyor olun, yapıcı eleştiriyi vermek kadar övgü vermek de önemlidir. Kod gözden geçirildiğinde, insanları teşvik etmek iyidir!
Oyun Programlamanın Temel Prensipleri Nelerdir?
Oyun programlamayı kapsayan bir bloga mutlaka dahil edilmesi gereken bazı önemli konular vardır. İşte en önemli düşündüğümüz şeylerden bazıları.
Kaynak Kontrol/Versiyon Kontrolü
Oyunlardaki gibi oyun kaydetme noktaları gibi, proje geliştirmeyi kaydetmek için de noktalar vardır. Bunlar, projeler için genel depolama görevi görür ve üç veya dört programcının aynı anda bir sistem üzerinde çalışmasını, bir değişiklik yapıp sunucuya göndermesini sağlar. Bu, değişiklikleri izlememize ve bir şey kırılırsa kolayca geri almamıza olanak tanır. Eğer iki geliştirici aynı dosyada çalışıyorsa, o dosya bir birleşimin parçası olur, eğer çakışmalar varsa, bunları manuel olarak çözebiliriz veya bir kişinin değişikliklerini uygulamak için seçebiliriz. Bu, Unity'de Prefab veya Sahne kullanırken sık sık olur.
Bu terimler bazen örtüşür, ancak genel olarak, kaynak kontrol koduna odaklanır ve versiyon kontrolü tüm proje dosyalarını, varlıkları ve belgeleri içerir.
İlk kez Kaynak Kontrolü kullanmaya başladığınızda biraz korkutucu gelebilir, çok bunaltıcı görünebilir ve çakışmalarla karşılaştığınızda ne yapmanız gerektiğini bilmeyebilirsiniz. Ancak, versiyon kontrolünün doğası zamanın anlarını kaydetmenize yardımcı olur, bu yüzden sık sık güncelleyip detaylı commit mesajları kullanıyorsanız inanılmaz derecede kullanışlı ve güvenlidir. Birçok noktaya geri dönüp, birden fazla dal oluşturabilirsiniz vb. Geliştiricilerin güvenlik ağı olarak düşünün, böylece Pixar'ın Toy Story 2'si - yanlışlıkla silinip sonra Teknik Direktörlerinin evindeki bir sabit diskten kurtarılan - gibi bir aksilikten kaçınabiliriz, bunun yerine her şey güvende sunucuda durur.
Nesne Yönelimli Programlama
Bu, Kwalee'de esas olarak kullandığımız programlama türüdür. Gerçek şeyleri veya soyut kavramları temsil etmek için nesneler kullanır ve kod tabanını, nasıl gördüğümüz ve gerçek dünyadaki nesnelerle etkileşimde bulunduğumuz ilkeleri kullanarak organize etmeyi hedefler. Kodun farklı sınıflara bölünmesiyle karmaşık sistemleri sürdürmemize yardımcı olur, böylece kodu tekrar kullanılabilir, ölçeklenebilir ve daha kolay bakım yapılabilir hale getirir.
Elbette, iyi olup olmadığını üzerine tartışmalar var. En yüksek performansı göstermese de, iyi çalışıyor. Dillerle olduğu gibi, her birinin kendi artıları ve eksileri vardır ve başlamanız için birini öğrenmelisiniz ve dillerin ve derleyicilerin (insan kodunu makine koduna çeviricileri) nasıl çalıştığını kavramak için birini öğrenmelisiniz. Diğer türleri de düşünebilirsiniz, örneğin fonksiyonel programlama ki bunu daha çok matematik gibi ele alır, mantık programlaması ki kurallara dayanır veya prosedürel programlama ki adım adım veri kullanır.
Programlama Desenleri
Bunlar son derece yararlı şeylerdir - yazılım tasarımında karşılaşacağınız yaygın sorunlara yeniden kullanılabilir çözümler sağlarlar. Size bir sorunu çözmek için bir şablon sunarlar, bu yüzden her seferinde tekerleği yeniden icat etmek zorunda kalmazsınız ve kanıtlanmış çözümleri takip edebilirsiniz.
Örneğin, Singleton tasarım deseni, oyununuz genelinde bir sınıfın, örneğin bir oyun ayarları yöneticisinin sadece bir örneğinin bulunmasını sağlar ve buna global bir erişim noktası verir. Bu desenin kodu, AyarlarYönetici sınıfının yalnızca bir örneğinin var olmasını sağlar, böylece her ihtiyacınız olduğunda yeniden yaratmanıza veya çoğaltmanıza gerek kalmaz.
Ayrıca, üretim deseni, nesneleri daha düzenli ve esnek bir şekilde oluşturmanıza yardımcı olabilir. Belirli türde nesneler, karakterler veya öğeler gibi spesifik türde nesneler oluşturmak için yöntemler tanımlayabilir, bu da her seferinde sıfırdan başlamadan benzer türde daha fazla nesne oluşturmanıza olanak tanır.
Umarım bu blog oyun programlaması için size bir tat vermiştir, ister alanda yeni olun, ister deneyimli bir programcı olun! Eğer çalışkan ama eğlenceli bir kişiliğiniz varsa, ekibimize uyarsınız, bu yüzden Kwalee kariyerleri hakkında daha fazla bilgi edinin. Aksi takdirde, mobil oyunlarımızı veya yayıncılık hakkında öğrenebilir ve bir geliştirici ve yayıncı olarak neler yayınladığımızı daha fazla tanıyabilirsiniz.








