Oyun oluşturmaya yönelik bir platform veya “Oyun Motoru” Nedir? Oyun Motoru - Kendiniz Yazın veya Hazır Bir tane Alın.

Bu, gelecek vaat eden oyun geliştiricilerine yönelik bir dizi materyalin beşinci makalesidir: Oyun motoru - kendiniz mi yazacaksınız yoksa hazır bir tane mi alacaksınız?

Acemi geliştiricilerin en yaygın hatalarından biri, ne pahasına olursa olsun kendi oyun motorunu yazıp onun üzerinde oyun yapma arzusudur. Her ikisini de paralel olarak yürütmeye çalıştıkları ve sonunda her ikisinde de başarılı bir şekilde başarısız oldukları durumlar nadir değildir.

Neden kendi oyun motorunuzu yazmamalısınız?

Her şeyden önce kendinize basit bir soruyu yanıtlamanız gerekir: tam olarak ne yapmak istiyorsunuz? oyun veya motor? Eğer bu bir motorsa, oyunu unutun ve yalnızca ona odaklanın. Eğer oyunsa hazır bir motor veya tasarımcı alın ve yazılım kısmını geliştirerek dikkatiniz dağılmadan oyunun yapın.

Tam teşekküllü bir oyun motoru oluşturmak, özel bilgi, oyunların nasıl çalıştığına dair anlayış, çok fazla boş zaman ve kaynak kodu yazma arzusu gerektirir. Ve inanın bana, bu hiç de göründüğü gibi eğlenceli bir aktivite değil. Kullanıma sunulan ücretsiz hazır çözümler bile, zamana ek olarak ciddi finansmanın da yatırıldığı ticari motorlardan bahsetmek yerine, binlerce adam-saatlik programlama gerektirir. Etrafta her iki kişiden biri araba kullanırken tekerleği icat etmek nankör ve tamamen gereksiz bir iştir.

Ayrıca özgür oyun geliştirme sistemleri, birçok ticari oyun motoru, oyun projelerinde anında kullanıma tamamen hazır, çeşitli teklifler sunuyor çok cazip lisanslama programları: Tamamen bedava ( Birlik 3D eski Indie baskısında), Telif Ücreti ödemeli karma bir plan ( Gerçekdışı Geliştirme Kiti) - 99 $ lisans ücreti ve kazanılan ilk 5.000 $'dan sonra kârın %25'inin ödenmesi veya tam ticari lisansın uygun maliyeti (1.500 $ için Unity Pro).

Ek olarak, oyuna hazır olmanın belirli bir aşamasına kadar hiç kimse herhangi bir motorun ücretsiz sürümünün kullanımını yasaklayamaz, böylece daha sonra çabalarının somut ve en önemlisi görsel bir sonucuyla üçüncü taraf aramaya başlanabilir. Projenin ticari lisansa aktarılması için finansman.

%95 için oyun projeleri Her tür ve odak noktasında, onların ihtiyaçlarına uygun, hazır bir çözüm bulmak mümkündür. Oyun motorlarının yerel oyun geliştirme pazarında merak konusu olduğu ve çok paraya mal olduğu zamanlar geride kaldı ve onlarla birlikte kendi oyun motorunuzu yazma lehine olan tartışmalar da sona erdi.

Üstelik her şeyi kesinlikle kendiniz yazma arzusu ve böyle bir çözümün olacağı yanılsaması en iyi ürün Mevcut analoglara göre, zaten çok sınırlı kaynaklar tamamen gereksiz bir göreve (kişisel deneyim) yatırıldığında, acemi geliştiricilere çok acımasız bir şaka yapabilir ve sonuçta projenin erken ölümüne yol açabilir.

Özetleyelim: Kendi oyun motorunu yazmak, tam olarak neye ihtiyaç duyduğunu ve nedenini açıkça anlayan, bu yaklaşımın yeterli avantajlarını gören ve planını makul bir zaman dilimi içinde uygulayabilen kişiler tarafından yapılabilir. Herkes hazır bir çözüm aramalı, neyse ki var Son zamanlarda Yeterince ortaya çıktı - en azından aynı Unity 3D ve UDK'yı alın.

Birlik3D

Unity 3D çok uygun fiyatlı bir motordur. Rakiplerine göre çok sayıda yadsınamaz avantajı var ve belki de en önemlisi, lisans için yalnızca bir kez ödeme yapıyor olmanızdır. Bir oyunun ne kadar popüler olduğu önemli değil; Unity'yi seçerseniz tekrar para harcamanıza gerek kalmayacak. Mali açıdan bakıldığında bu, özellikle yeni başlayanlar ve acemi geliştiriciler için iyi bir çözümdür.

  • avantajlı lisanslama politikası;
  • kullanım kolaylığı;
  • herhangi bir platformla uyumlu;
  • harika topluluk;
  • düşük giriş eşiği;
  • geliştiriciler arasında popülerdir (bu, hataların hızla bulunup düzeltildiği anlamına gelir).
  • sınırlı araç seti (büyük olasılıkla bunlardan bazılarını kendiniz geliştirmeniz gerekecektir);
  • Bir oyun yapma süreci çok zaman alır.

Gerçekdışı Motor

Unreal Engine, AAA oyunları geliştirmek için en popüler motorlardan biridir. Gears of War, Batman: Arkham Asylum, Kütle Etkisi- tüm bu vuruşlar onun üzerinde yapıldı.

  • Pek çok geliştirici bunu kullandığından Unreal Engine, rakipleri arasında belki de en iyi topluluğa sahip. Birkaç saatlik video eğitimi bunun kanıtıdır;
  • mükemmel teknik destek ve güncelleme mekanizması;
  • Her güncellemede yeni araçlar çıkıyor
  • Çeşitli amaçlara yönelik geniş bir araç yelpazesi (bazılarının kullanımı o kadar kolaydır ki bunları bir okul çocuğu bile kullanabilir)
  • Çeşitli platformlarla uyumlu (iOS, Android, Linux, Mac, Windows ve diğerleri)
  • Yeni lisanslama politikası, aylık 19 ABD Doları tutarında bir abonelik ve oyunun 5.000 ABD Dolarından fazla kazanması durumunda %5 telif hakkını içeriyor ve bu da motoru geliştiriciler için eskisinden çok daha çekici hale getiriyor.
  • öznel. Bazı geliştiriciler belirli araçlara alışmanın zor olduğundan şikayet ediyor

CryEngine 3

Oyunun harici bileşeni sizin işinizse, CryEngine 3'e ihtiyacınız var.

  • Akış Grafiği işlevi, oyunu mükemmel grafiklerle dekore etmenize yardımcı olacaktır;
  • güçlü ses yaratmak için bir dizi Fmod işlevi;
  • segmentteki en basit yapay zeka oluşturma süreci;
  • Acemi bir geliştiricinin kullanıcı arayüzünü yapması kolay olacaktır.
  • ücretsiz sürüm için nispeten özensiz teknik destek;
  • Motor sektörde nispeten yeni olduğundan henüz güçlü bir topluluk oluşturamamıştır;
  • nispeten yüksek giriş engeli.

KahramanEngine

Bu motor, çok oyunculu oyunlar oluşturmada kendini kanıtlamıştır - en azından Yıldız Savaşları: Eski Cumhuriyet. Lisans oldukça pahalıdır ve acemi geliştiriciler için pek uygun değildir, ancak projeniz iddialıysa bu seçeneği değerlendirmenizi tavsiye ederim.

  • Açık bir dünya yaratmak için çeşitli haritalar mevcuttur. Bunları "kesintisiz" bir şekilde bağlamak mümkündür;
  • inanılmaz derecede güçlü yapay zeka!
  • haritaları modellemek için kullanışlı bir araç seti;
  • karmaşık görevler oluşturmaya, kaynakları işlemeye ve toplamaya uygun;
  • Teknik destek, oldukça kullanışlı olan HeroCloud hizmeti kullanılarak sağlanmaktadır.
  • Komut dosyası motoru güçlüdür ancak kullanımı zahmetlidir;
  • HeroEngine, HeroCloud müşteri desteğiyle birlikte çok pahalıdır ve acemi geliştiricilerin erişebilmesi pek mümkün değildir;
  • giriş engeli yüksek.

Öfke Motoru

Rage Engine'in sağladığı geniş özellikler yelpazesiyle çok az kişi rekabet edebilir. Büyük Hırsızlık Oto V, Red Dead Redemption ve daha birçok ünlü proje bu motor kullanılarak yapıldı.

  • büyük dünyalar ve hava efektleri yaratmak için geniş fırsatlar;
  • güçlü yapay zeka;
  • aralarından seçim yapabileceğiniz birçok oyun stili;
  • hızlı ağ kodu.
  • Motor arayüzü nispeten elverişsizdir;
  • Kontroller klavye ve fare için kötü şekilde optimize edilmiştir.

Proje Anarşisi

Bu güçlü oyun motoru, açık ve anlaşılır dokümantasyonu nedeniyle birçok geliştirici tarafından beğeniliyor. Ancak dezavantajları da vardır.

  • iOS, Android ve Tizen platformlarında oyun geliştirmeyi planlıyorsanız lisans ücretsizdir;
  • hataları bulmak ve düzeltmek için güçlü araçlar;
  • güçlü topluluk;
  • yayıncının açık, anlaşılır belgeler ve örnekler sunması;
  • Ses eşliği için Fmod;
  • güçlü Havok yapay zekası.
  • oyunu Mac ve Linux'ta geliştirme imkanı yok;
  • Yeni başlayan geliştiriciler için giriş kılavuzu yoktur;
  • oyun PC içinse, lisans size oldukça pahalıya mal olacaktır.

OyunSalata

Bu popüler oyun motorunun yaratıcıları, geliştiricinin tek satır kod yazmak zorunda kalmayacağına söz veriyor. Genel olarak bu doğrudur. Ancak, tüm iyi şeyler için ödeme yapmanız gerekiyor: Motorun bir takım önemli eksiklikleri var. Yalnızca iPhone üzerinde oyun geliştirmeyi planlıyorsanız bu sizin seçiminiz.

  • ücretsiz lisans (yalnızca PRO sürümü için para ödemeniz gerekecektir);
  • aktif topluluk;
  • hızlı prototipleme için mükemmel motor;
  • Cocona ve Moai gibi popüler mobil platformlarla uyumludur.
  • sınırlı sayıda geliştirme aracı;
  • iOS platformunun çoğu özelliğine erişim yok.

GameMaker:Stüdyo

Yeni başlayan bir geliştiriciyseniz ve basit ve anlaşılır bir motora ihtiyacınız varsa GameMaker: Studio hedeflerinizi tam olarak karşılar.

  • basit ve sezgisel kontroller;
  • kendi programlama dili Oyun Yapıcı Dil (GML);
  • Steam ile entegrasyon;
  • platformlar arası.
  • oyunda sorun gidermenin nispeten zor olması;
  • Oyununuzu popüler platformlara aktarmak için yüklü miktarda ödeme yapmanız gerekecek.

Uygulama Oyun Kiti

App Game Kit, geliştiricilere yönelik çapraz platform yazılımıdır. Çok yönlülüğü ve kullanım kolaylığı nedeniyle değerlidir.

  • büyük platformlar için kod yazmanıza olanak tanır: Android iOS, Windows, Mac ve Linux;
  • Oyunları herhangi bir cihazda test etmenize olanak tanıyan bir IDE ile birlikte gelir;
  • ek kurulum olmadan zaten IAP, AdMob ve Push'u içerir;
  • 2D grafikler, fizik ve ağ etkileşimi için güçlü komut dosyaları vardır.
  • Bu motorla çok az kişi çalıştığı için programın eksiklikleri uzun süre giderilemiyor (nispeten zayıf teknik destek);
  • birçok hata (doğal olarak önceki paragraftan kaynaklanmaktadır).

Cocos2D

Pek çok tasarımcı Cocos2D'yi son derece uyarlanabilir ve aynı zamanda yeni başlayan geliştiriciler için mükemmel şekilde uygun olan birkaç motordan biri olarak görüyor.

  • iOS platformuna mükemmel şekilde entegre edilmiştir;
  • ücretsiz ve açık kaynak;
  • geniş geliştirme araçları seçimi;
  • güçlü topluluk desteği.
  • kullanımı çoğu analogdan daha zor;
  • girişe karşı yüksek bariyer;
  • Mac veya iOS için özel olarak "özelleştirilmiş". Platformlar arası işlevsellik yoktur.

Sonuç olarak, insanlar konsollarda, mobil cihazlarda, PC'lerde ve hatta TV'de oyun oynuyor; dolayısıyla geliştiricinin her zaman hedeflerine uygun bir motor bulma fırsatı var. Umarım makalem seçiminizi yapmanıza ve sürekli büyüyen oyun endüstrisine başarıyla katılmanıza yardımcı olur.

Hepimiz oyun oluşturmaya yönelik motorları duymuşuzdur, ancak çok az kişi bunların ne olduğunu anlıyor.

Video oyunları geliştiren stüdyoların kendileri bile terimin çok belirsiz bir tanımını veriyor, daha doğrusu oyunu üzerine inşa edildiği motordan gerçekten ayıramıyorlar.

Roldeki duruma yaklaşarak soruyu anlamaya çalışalım ve düşünelim. en popüler oyun motorları: özellikleri, uygulama alanları, zayıf ve güçlü yönleri.

Konsept

Oyun motoru veya oyun motoru- bu orijinal yazılım, genellikle belirli bir türden bilgisayar oyunları oluşturmak için tasarlanmıştır.

Terim 90'ların ortasında atıcılarla ilgili olarak oluşturuldu. Quake, Wolfenstein ve Doom.

Böyle bir kavram ortaya çıkmadan önce bile oyun DünyasıŞaşırtıcı derecede iyi birleştiklerini fark ettim:

  • üç boyutlu grafikler;
  • nesnelerle çarpışmaların hesaplanması;
  • hacimli oyun dünyası;
  • ses bileşeni;
  • envanter (silah sistemi) ve diğer kurallar.

Bunu fark eden geliştiriciler aynı Doom'u temel alan kendi oyunlarını yayınlamaya başladı, minimum değişiklikle: haritaların ve diğer grafik modellerin yeniden çizilmesi, fizik motorunun düzenlenmesi.

Motorların büyük çoğunluğu belirli bir oyun türü ve çoğunlukla belirli bir platform için yaratılmıştır.

Bir oyun motorunu birden fazla platformda veya türde kullanmak, onu daha az birleşik ve ideal hale getirir ve potansiyeline ulaşamaz.

Çeşitler

Oyun geliştirme motorları türler konusunda uzmanlaşmıştır.

Örneğin temel yazılım ve eylem, ana bileşenlerde bile oldukça farklı olacaktır. Buna rağmen hepsinin bir takım ortak veya benzer kısımları (kod satırları) vardır.

Her oyunda nesneler arasında etkileşim vardır., gamepad, fare ve klavye kullanarak birini veya bir şeyi kontrol etmek, resim ve ses çıktısı almak, metni üst üste koymak, üç boyutlu nesneler oluşturmak (3D oyunlarda).

Bunu dikkate alarak, bazı motorlar çeşitli türlerde eğlenceyi geliştirmek için başarıyla kullanılmaktadır. Başlangıçta birinci şahıs nişancı oyunları oluşturmak için bir platformdu, ancak Savaş donanımı(üçüncü şahıs görünümü) ve Hız Yıldızı(ırk) buna dayanarak tam teşekküllü video oyunları olduğu ortaya çıktı.

Atıcı

Onlar sayesinde motor kavramı ortaya çıktı, onlarla başlayalım.

Atıcılık oyunları oluşturmaya yönelik platformlar bir dereceye kadar teknolojik açıdan en gelişmiş, en gelişmiş ve karmaşık olanlardır. Yüksek kaliteye ek olarak, oyuncak için aşağıdaki gereksinimler öne sürülmektedir:

  • olayların dinamiklerini dikkate alarak sanal bir üç boyutlu dünyayı modelleme işlevi;
  • hedefleme kontrolünün varlığı;
  • son derece duyarlı oyun mekaniği;
  • karakterin ellerinin ve silahlarının çiziminde ve ayrıntılarında belirgin netlik;
  • iyi animasyon parçacık etkileşimine dayalı atışlar ve patlamalar;
  • Nesnelerin tahrip edilebilirliği de dahil olmak üzere, atışlara ve patlamalara tepki olarak çevrenin gerçekçi davranışı; bu tür motorların neden yüksek gereksinimler kinematik alanında;
  • büyük seçim silahlar farklı özellikler;
  • iyi geliştirilmiş bir karakter hareketleri ve etkileşim modeli;
  • tek oyunculu bir oyunun varlığında yapay zekanın kalitesi;
  • manifold oyun modları ve kurumsal modda kitlesel katılım.

Platform oyunu

Genellikle bunlar iki boyutlu eğlencelerdir. onlar için gereksinimler daha yumuşaktır:

  • çok dikkat ediliyor dış görünüş ana karakterin kişiselleştirilmesi, davranışı ve animasyonu;
  • hareketli platformlar olarak adlandırılan çeşitli platformlar (düşme, farklı yörüngelerde hareket etme, kaybolma, dönme);
  • basamaklar, halatlar, merdivenler, borular ve bunlarla etkileşime girecek bir sistem şeklinde ek platformlar;
  • bulmaca unsurlarının varlığı;
  • çok katmanlı geometri;
  • nesne etkileşiminin basit fiziği;
  • diğer oyun karakterleriyle etkileşim (diyaloglar, savaşlar).

Savaş

Benzersiz yetenek ve tekniklere sahip çok çeşitli karakterler, her birinin bireysel animasyonu, yüz ifadeleri ve jestleri, turlar boyunca görevlerin tamamlanması, karmaşık bir saldırı sistemi, bunların kombinasyonları, savunma hareketleri, kombinasyonlar ve özel teknikler ile karakterize edilirler. .

Ağ etkileşimi, karakter özelleştirme, bir dövüşün sonuçlarının ortaya çıkması (çizikler, sıyrıklar) ve bitirme teknikleri de dövüş oyunlarında yaygındır.

Irk

Yarış için tasarlandı Oyunların özelliklerini dikkate alarak birden fazla oyun motoru.

Çoklu iş parçacığının uygulanması nedeniyle PhysX, herhangi bir kontrol olmaksızın özel bir iş parçacığının varlığıyla ayırt edilir. Bu, paralel iş parçacıklarında bir dizi görevin aynı anda yürütülmesine olanak tanır.

Mozaikleme, renk düzeltme üzerinde olumlu bir etkiye sahip olan, görüntüdeki gürültüyü ve greni gerçek zamanlı olarak üst üste bindirerek elde etmenize olanak tanır.

Hacimsel sis, hareket bulanıklığı, herhangi bir yüzey için paralaks, önemli doğruluk ve yüksek detay, motorun tüm avantajları değildir.

Ses bileşeni, üç boyutlu alan hissi veren ve sesin kaynağını hesaplama yeteneği veren üç boyutlu konumlandırmayı destekler.

Diğer işlevler:

  • geniş renk uzayına sahip sahnelerin görselleştirilmesi;
  • çerçevede onlarca ışık kaynağının kullanılması;
  • tamamen dinamik aydınlatma;
  • performansı etkilemeden hareket bulanıklığı;
  • görselleştirme sürecinin mükemmel paralelleştirilmesi;
  • ses yayılımının hesaplanması, emilimi ve engellerden yansıması;
  • birçok savaş koşulu;
  • kullanışlı ve anlaşılır komut dosyası sistemi;
  • AI topolojisi analiz sistemi;
  • karakterlere görme, işitme ve diğer duyular verilmiştir, bu da onları ciddi rakipler haline getirir;
  • grup davranışı.
  • oyunları konsollara taşıma sürecinin karmaşıklığı;
  • orijinal bir gelişme değil, geliştirilmiş bir X-Ray (gerçek kanıtlanmadı, ancak bunun ipuçları var);
  • DirextX12 desteği uygulanmadı.
  • geliştirilmiş grafikler;
  • modellerin yıkılabilirliği ve PhysX'in diğer avantajları;
  • özel efektler uğruna özel efektler yoktur (sadece gerekli olanlar eklenir).

Oyunlar: Metro Exodus ve Arktika.1'in de aralarında bulunduğu Metro serisi geliştirme aşamasındadır.

Kişisel tutkuların gerçekleştirilmesinin çarpıcı bir örneği ve BDT'de yaratılan dünyaca ünlü birkaç motordan biri.

Örs

Ubisoft'un bir yan kuruluşu tarafından oluşturulmuştur, yayınlanmak üzere ve yalnızca şirket içinde kullanılmaktadır.

İlk oyun Assassin's Creed'in ilk bölümüydü, ardından bir snowboard simülatörü ve Prince of Persia ortaya çıktı.

Bunlardan herhangi biri çok fazla sürpriz yarattı ve sanal eğlence dünyasına birçok yeni şey getirdi.

PC, PS tüm sürümleri, Nintendo, Wii ve Xbox'ta desteklenir.

Kod C++ ile yazılmış, modeller ZBrush'ta çizilmiş ve çevredeki dünya 3ds Max'te çizilmiştir. Doğru iskelet animasyonu için . Sanal dünyanın fiziği efsanevi Havok tarafından modellenmiştir. Son sürümlerde günün saatini değiştirmeye, dinamik aydınlatmaya ve uzaktan görüntülemeye büyük önem verildi. Aynı zamanda ilerici bir bitki örtüsü şemasını (Far Cry 2'deki gibi) yeni yapay zeka ile entegre etti; bunun önemli farkı, geliştirilmiş NPC navigasyon sistemidir. Direct3D 10/11'in uygulanması ve hata ayıklaması çok pahalı olmasına rağmen iş yine de yapıldı.

Motorun isimlendirilmeyen özellikleri arasında Aşağıdakileri vurgulayalım:

  • 32 iş parçacığına kadar çok çekirdekli sistemlerde çalışmanın optimizasyonu;
  • oyunların panoramik modda birden fazla ekranda başlatılması;
  • simüle edebilen karmaşık gürültü sisi kum fırtınası fps düşüşü yok;
  • ışığın suda kırılması, yansıması ve saçılmasının etkileri;
  • bir ara sahnede en fazla altı farklı karakter;
  • Animasyonların çoğu gerçek aktörlere dayanmaktadır;
  • bir sahnede 3 bine kadar katılımcı olabilir, bu da PC'nin yükle başa çıkabildiği sürece büyük savaşlar düzenlemenize olanak tanır;
  • NPC'ler kahramana aktif olarak tepki verirler, tek tek değil aynı anda saldırabilirler;
  • modelleri kesme ve nesneleri derinliğe göre ayırma teknolojisi.
  • kaynak talebi;
  • lisanslı değil;
  • uzun süredir DirectX 10 ve 11'i desteklemiyordu.
  • çoklu iş parçacığının iyi uygulanması;
  • PC'de ve birçok konsolda çalışır;
  • yüzlerce oyun karakterinin katılımıyla ekstralar uygulama yeteneği.

İLEUbisoft, devasa bir karmaşa yaratmak ve daha fazla insanı tek bir yere yönlendirmek açısından kimse kıyaslanamaz.

Yaratılış Motoru

Skyrim'deki yeteneklerini gösteren Amerikan stüdyosu Bethesda'dan oldukça yeni bir motor. Önceki çözümler gibi, yalnızca geliştiricisinin ihtiyaçları için oluşturuldu. Gamebryo temel alındı ​​- Oblivion ve eklentileri için bir yardım.

Teknolojiyle ilgili ilginç olan ilk şey– uzun menzilli işleme, serbest ve hızlı hareket ile devasa konumlar için destek.

Su ve karla çalışmaya çok dikkat ediliyor ve otomatik olarak yağış, taş, ağaç ve çim üreten sistem, araziye bağlı olarak oluşturulan nesnelerin oranlarını bağımsız olarak belirliyor.

Oblivion'da kullanılan gelişmiş yapay zeka, insanların yaşamlarını ve ana karakterle ilişkilerini daha gerçekçi bir şekilde simüle ediyor.

Olay örgüsünün gelişimini yönetme kavramı, oyun tarzını dikkate alarak ek görevler üretebilir.

Motorun yeni versiyonunda ağaç yapı sistemi önemli ölçüde yeniden tasarlandı, bu da bitki dünyasının çeşitlendirilmesini mümkün kıldı ve hesaplama yükünü hafifletti.

Karakterleri canlandırmak için Havok'un üçüncü taraf bir aracı kullanıldı.

Özellikler:

  • Oyuncular ve mod geliştiriciler için Creation Kit seviye düzenleyicisinin kullanılabilirliği;
  • Fallout'ta fizik tabanlı oluşturma ortaya çıktı;
  • mod geliştiriciler için birçok araç;
  • Değişiklikleri konsollara aktarma kolaylığı.
  • lisanslı değil;
  • yaratmak zor İki elli silah;
  • Karakter davranış sistemi oldukça zayıf.
  • her platformda çalışacak bir mod editörü var;
  • uzun çekme mesafesi;
  • ağaçları ve onların animasyonlarını oluşturmak için benzersiz bir şema.

Henüz mod geliştiriciler için daha iyi bir şey icat edilmedi, bu nedenle Fallout'tan daha fazlası yalnızca Oblivion için yaratıldı.

CryEngine 4

Birinci şahıs nişancı oyunları için Alman Crytek firmasının motorunun en son versiyonu.

En başarılı kullanım örneği .

Motor, 2016 yılından bu yana "istediğin kadar öde" planına göre, ancak yalnızca oyun amaçlı olarak dağıtılmaya başlandı.

Özellikler ve yetenekler:

  • koridor bölgelerinin değil, devasa bölgelerin varlığı;
  • yerler dikişsiz oluşturulur;
  • karakterlerin ve araçların ters sinematiklerine destek, bunların birbirleriyle etkileşimi çevre;
  • çeşitli katı olmayan nesnelerin taklidi: kumaş, su;
  • her silah türünün benzersiz özelliklerine sahip devasa bir cephanelik;
  • senaryo ve komut zekası;
  • AI parametrelerini programlama bilgisine sahip olmadan değiştirebilirsiniz;
  • interaktif müzik eşliği - müzik duruma uyuyor;
  • 5.1 ses sistemi için tam destek;
  • sesin ortamı, yansımasını ve emilimini dikkate alarak doğal seslerin çoğaltılması;
  • ısı ve ateşin gerçekçi etkisi;
  • camın şeffaflığı - binalarda ne olduğunu görebilirsiniz;
  • 2000 m'ye kadar görünür mesafeye sahip çok seviyeli bir ortam elde etmek için yükseklik haritalarının çalıştırılması;
  • Crysis'in mükemmel bir şekilde gösterdiği ışık ve gölgelerle çalışmak için inanılmaz olanaklar;
  • atmosfer eklemek için hacimsel kalın sis ve duman;
  • olağandışı fiziksel etkilerin varlığı (örneğin bir nano giysi).

Oyun motoru(İngilizce) oyun motoru) bilgisayar ve video oyunlarının ve diğerlerinin merkezi yazılım bileşenidir. etkileşimli uygulamalar gerçek zamanlı olarak işlenen grafiklerle. Temel teknolojiyi sağlar, geliştirmeyi basitleştirir ve çoğu zaman oyuna birden fazla platformda çalışma yeteneği kazandırır. oyun konsolları ve GNU/Linux, Mac OS X ve Microsoft Windows gibi masaüstü işletim sistemleri.

"Oyun motoru" ifadesi, 2D veya 3D grafikler için bir işleme motoru ("görselleştirici"), bir fizik motoru veya çarpışma tespiti (ve çarpışma reaksiyonları), ses, komut dosyası oluşturma, animasyon, yapay zeka dahil olmak üzere bir dizi uygulama programını ifade eder. , ağ kodu, akış, bellek yönetimi, iş parçacığı ve sahne grafiği. Açıkça söylemek gerekirse, programcılar tarafından oyun geliştirirken yazılan tüm kod parçaları motor bileşenleridir. Oyun süreci(oyun) bu programlarda uygulanan işlevler tarafından belirlenir.

Bilgisayar çağının başlangıcında her oyun geliştiriciler tarafından "sıfırdan" yaratıldıysa, Doom oyununun ortaya çıkışından bu yana (10 yıldan fazla bir süre önce) her şey değişti. Günümüzde neredeyse tüm ticari oyunlar kullanıma hazır araçlar kullanılarak oluşturulmaktadır: birçok farklı oyun oluşturmak için tek bir oyun motorunun yeniden kullanılmasıyla geliştirme süreci sırasında tasarruf yapılabilir.

Bazen "mod geliştiriciler", komut dosyaları aracılığıyla oyunda yerleşik programlama dilini kullanarak bazı değişiklikler yaparlar. Hilecilerin kullanmaktan keyif aldığı motor fonksiyonlarının bazı parametrelerinde ince ayar yapabilirsiniz (örneğin, bir oyuncunun sahip olduğu para miktarını artırmak). Ancak oyunun kaynak koduna müdahale edilmeden oynanışta büyük değişiklikler yapılması imkansızdır. Ve sorunların başladığı yer burasıdır. Öncelikle her oyun şirketi kodu herkese açık hale getirmez. İkincisi, çok sayıda motor fonksiyonunu herkes bağımsız olarak anlayamaz. Referans bilgisi olmadığından çoğu zaman başka bir yol da yoktur ve teknik Destek(soracak kimse yok). Üçüncüsü, kural olarak, teknik olarak zaten güncel olmayan motorların (örneğin, Quake II, III) kaynak kodunu yayınlarlar.

Acemi geliştiriciler için geriye ne kaldı?

  • Kullanım hakkını satın alın modern motor Tanınmış bir şirketten (motorun lisansını alın). Referans bilgileri ve üretici desteğiyle birlikte gelir. Ancak bu zevk ucuza gelmiyor. Yüzbinlerce dolara varan maliyeti olan ticari oyun motorları var.
  • Kendi motorunuzu geliştirin. Elbette bir çıkış yolu var ama çok çaba gerektiriyor ve yüksek yeterlilik programlamada.
  • Şunlardan birini kullanın: ücretsiz motorlar, yeteneklerine en uygun olanıdır. Kural olarak, Ek Bilgiler ve destek.

Ücretsiz oyun motorları

Bugün ücretsiz olanların en popüler ve gelişmiş olanı (genellikle o) kalem kaynağı, İle açık kaynak) oyun motorları şunlardır:

  • OGR(Nesneye Dayalı Grafik İşleme Motoru)

Nesne yönelimli grafik oluşturma motoru. C++, 3D grafiklerle yazılmış olup Direct3D ve OpenGL kullanır. Bu motor için var basılmış kitaplar(Açık ingilizce dili). Ayrıca Rusça bir web sitesi de bulunmaktadır. Birlikte çalışmak En son sürüm Motor şu derleyicilerden birini gerektirir: gcc, Visual C++ 7.1 (2003), Visual C++ 8.0 (2005). Motor derleyicileri destekler.Linux ve Mac'te çalışmak için gcc 3+ kullanılır. Oyun DirectX kullanacaksa öncelikle DirectX SDK'yı yüklemelisiniz (Microsoft web sitesinden indirilebilir).

Geliştiriciye göre Ogre, kelimenin tam anlamıyla bir oyun motoru değil. Belgelerde belirtildiği gibi, “Ogre bir grafik motorudur ve yalnızca bir grafik motorudur. Bu, grafikleri görüntülemek ve işlemekten başka bir şey yapmadığı anlamına gelir. Ancak bu aynı zamanda tam teşekküllü bir oyun oluşturmak için ona üçüncü taraf kütüphaneleri ekleyebileceğiniz anlamına da gelir:

  • ses;
  • ağ oluşturma;
  • giriş (manipülatörler, kumanda kolları);
  • çarpışma hesaplaması

Ogre bu kütüphaneleri içermiyor ancak harici modüllerin kolayca bağlanmasını sağlayan bir arayüz sağlıyor."

Motorun çeşitli grafik formatları için geniş desteği vardır. Standart olanlara ek olarak hacimsel, sıkıştırılmış dokular ve küp haritaları.Çeşitli 3D grafik paketlerinden (3DS Max, Maya, Milkshape3D, Blender Wings3D) 3D modelleri içe aktarmanıza olanak tanıyan birçok eklenti vardır. Bu durumda hem çerçeve hem de iskelet animasyonunu kullanabilirsiniz. Ogre'deki manzaralar güzel görünüyor. Küçük bir oyun oluşturmak için motor gerekli tüm standart sahne kontrol sınıflarını içerir. Oyun kaynakları PK3 ZIP arşivlerinde paketlenebilir.

Ogre'de ticari oyunlar da yapılıyor - özellikle üzerine "Çelik Canavarlar" oyunları yazılıyor (Pasifik Fırtınası) ve çevrimiçi oyun Anarşi Çevrimiçi. Ticari bir oyun motorunu temel alan geliştirme, Ogre'nin büyük potansiyelini gösteriyor. Birçok kullanıcısı var. Sorun ortaya çıktığında iletişime geçilecek biri var. Elbette birileri bunları sizden önce çözmüştür veya en azından bunların üstesinden nasıl gelineceğini biliyordur. Çok sayıda arka plan bilgileri ve örnekler, yeni başlayanların bile motorda uzmanlaşmasını sağlayacaktır. Ticari bir motor satın alacak mali durumunuz yoksa bu, oyun geliştirmek için mükemmel bir seçenektir.

  • Kristal Uzay. Özellikle oyun geliştirmeye yönelik, gerçek zamanlı 3D grafiklere yönelik açık kaynaklı, platformlar arası bir SDK. C++ ile yazılmıştır ancak sadece C++ projelerinde değil, Python, Perl, Java projelerinde de kullanılabilir.
  • Nebula Motoru 2. Açık kaynaklı bir 3D oyun ve işleme motoru. Çeşitli ticari oyunlarda kullanılır. Ayrıca C++ ile yazılmıştır, yalnızca Windows'ta çalışır ve DirectX 9.0 kullanır. Gölgelendiricileri (HLSL ve DirectX FX dosyaları), iskelet animasyonunu, parçacık sistemlerini ve gölgeleri uygulamaya yönelik sınıflar vardır. Yaygın olarak kullanılan birçok kodlama dilini TCL, Python ve Lua'yı destekler.
  • . Açık kaynak, çapraz platform, C++ ile yazılmış, .NET'ten (C#, VisualBasic ve Delphi.NET gibi diller), Java - jirr veya Bindenlicht kütüphanesi kullanılarak, Python - Pyrr kütüphanesi kullanılarak, Ruby - kullanılabilir. IrrRuby kütüphanesini ve diğer birçok dili kullanarak. Bu oyun motoru Almanya'dan geliyor. Aslında bir kişi tarafından tanıtılıyor. Tek başına bir motor geliştirmek, onu tamamen ücretsiz hale getirmek ve tüm kaynak kodlarını yayınlamak herkesin yapabileceği bir şey değil. Irrlicht'in son versiyonu henüz çok uzakta olsa da üzerinde şimdiden ciddi oyunlar yapılabilir. Motor bunun için gerekli tüm işlevlere sahiptir. İşleme OpenGLDirect3D (DirectX9.0 desteğiyle) aracılığıyla yapılır. Ayrıca bir yazılım modu da var, yani her şey kendi yazılım görselleştiricisi tarafından oluşturulacak ve bu, video kartlarının mükemmel donanım yetenekleri çağında pratik olarak kullanılmayan. Öğrenmesi oldukça kolay olan bu oyun motoru, hem 3D oyunları programlamaya ilk adımlarını atanlar hem de tam teşekküllü bir oyun yaratma konusunda deneyimli ekipler için uygundur. Irrlicht hakkında daha fazla bilgiyi knol.google.com adresinden okuyabilirsiniz.
  • OpenSceneGraphg . Açık kaynak, çapraz platform, standart C++ ile yazılmış, OpenGL kullanıyor. .lwo, .obj, .geo, .3ds, .x, .wrl formatlarındaki 3D modellerle, yani herhangi bir modern 3D grafik düzenleyicide (3DS Max, Maya ve Lightwave 3D) oluşturulan nesnelerle çalışır.
  • Microsoft XNA. 3 platform için platformlar arası oyun geliştirmeye yönelik Microsoft teknolojisi - Windows, Xbox 360 ve Zune (Microsoft'tan mp3 oynatıcı). Doğru, Xbox için oyun geliştirmek için Xbox Geliştirici Kitini satın almanız gerekecek, ancak oyunlar Windows için ücretsiz olarak geliştirilebilir. Teknoloji, DirectX ve .NET Framework (Xbox 360'ta .NET Compact Framework) altında oyun geliştirmek için tasarlanmıştır ve kesin olarak konuşursak, XNA kullanarak oyun geliştirirken ana dil C# olmalıdır. Kurumsal destekli bir geliştirici topluluğu var. Techdays.ru web sitesinde, XNA'da oyunların geliştirilmesine adanmış birkaç “” (seslendirme slaytı) bulunmaktadır. Web seminerleri Microsoft çalışanları tarafından sunulur ve sürece bir giriş sağlar.
  • Başka ücretsiz oyun motorları da var: Panda3D, , Koyu Temel ancak yukarıda açıklananlar kadar yaygın olarak kullanılmazlar.

Hazır bir oyun motoruna sahip olduğunuz için oyunun sadece mekaniklerini düşünebilirsiniz ve bu geliştirici için çok önemlidir.

Kaynaklar:

  • sindicollo.blogspot.com - ücretsiz oyun motorlarının incelemesi;
  • knol.google.com - ücretsiz oyun motorları (A. Krylov);
  • x-sky.ru - ücretsiz oyun motorları;
  • irrlicht3d.org - Irrlicht motoruyla ilgili wiki kaynağı (İngilizce).

Son zamanlarda C++'da bir oyun motoru yazmakla meşgulüm. Küçük bir mobil oyun oluşturmak için kullanıyorum Dışarı Atla. İşte iPhone 6 cihazımdan kaydedilmiş bir video. (Sesi açabilirsiniz!)


Tarayıcınız HTML5 videoyu desteklemiyor.


Hop Out, kendim oynamak istediğim türden bir oyun: karikatürize 3D grafiklere sahip retro bir atari oyunu. Oyunun amacı tıpkı Q*Bert'te olduğu gibi platformların her birini yeniden renklendirmektir.



Neden biri oyun motoru yazmak istesin ki? Olası nedenler birçok:

  • Sen bir zanaatkarsın. Sistemleri sıfırdan oluşturmaktan ve onların hayata geçtiğini görmekten keyif alıyorsunuz.
  • Oyun geliştirme hakkında daha fazla bilgi edinmek ister misiniz? 14 yıldır oyun sektörünün içindeyim ve hala bunu çözmeye çalışıyorum. Sıfırdan bir motor yazabileceğimden bile emin değildim çünkü bu, büyük bir stüdyodaki bir programcının günlük iş sorumluluklarından çok farklıydı. Kontrol etmek istedim.
  • Kontrol hissini seviyorsunuz. Kodunuzu tam istediğiniz gibi düzenlemek ve her zaman her şeyin nerede olduğunu bilmek eğlencelidir.
  • AGI (1984), id Tech 1 (1993), Build (1995) gibi klasik oyun motorlarından ve Unity ve Unreal gibi endüstri devlerinden ilham alıyorsunuz.
  • Oyun endüstrisi olarak bizlerin, motor geliştirme sürecindeki gizemi ortadan kaldırmamız gerektiğine inanıyorsunuz. Henüz oyun geliştirme sanatında tam anlamıyla ustalaşmadık - kesinlikle mümkün değil! Bu sürece ne kadar dikkatli bakarsak, onu iyileştirme şansımız o kadar artar.

2017'deki oyun platformları (mobil, konsollar ve PC) çok güçlü ve birçok açıdan birbirine benziyor. Oyun motoru geliştirme artık geçmişte olduğu gibi zayıf ve nadir donanımlarla yapılan bir mücadele değil. Benim düşünceme göre, artık daha çok karşı bir mücadele var. kendi işinizin karmaşıklığı. Kolayca bir canavar yaratabilirsiniz! Bu nedenle bu makaledeki tüm ipuçları kodunuzu nasıl yönetilebilir tutacağınızla ilgilidir. Bunları üç gruba ayırdım:

  1. Serileştirmenin geniş bir konu olduğunun farkına varın.

Bu ipuçları her oyun motoru için geçerlidir. Size gölgelendiricinin nasıl yazılacağını, sekizli ağacın ne olduğunu ya da fiziğin nasıl ekleneceğini anlatmayacağım. Sanırım bunu bilmeniz gerektiğini zaten biliyorsunuz ve bu konuların çoğu yapmak istediğiniz oyunun türüne bağlıdır. Bunun yerine, geniş çapta ele alınmayan konuları - bir şeyin gizemini çözmeye çalışırken en ilginç bulduğum konuları - kasıtlı olarak seçtim.

Yinelemeli bir yaklaşım kullanın

İlk ipucum, bir şeyin (herhangi bir şeyin) işe yaramasını sağlamakta tereddüt etmemek, sonra tekrarlamak.


Mümkünse cihazı başlatan ve ekrana bir şeyler çizen örnek bir uygulamayla başlayın. İÇİNDE bu durumda SDL'yi indirdim, Xcode-iOS/Test/TestiPhoneOS.xcodeproj'u açtım, ardından iPhone'umda testgles2 örneğini çalıştırdım.



İşte! OpenGL ES 2.0'ı kullanan harika bir dönen küpüm var.


Bir sonraki adımım birinin yaptığı Mario'nun 3 boyutlu modelini indirmekti. Hızlı bir şekilde kaba bir OBJ dosya yükleyicisi yazdım - format o kadar da karmaşık değil - ve örneği tuğla yerine Mario çizecek şekilde değiştirdim. Ayrıca dokuları yüklemek için SDL_Image'ı da entegre ettim.



Daha sonra Mario'yu hareket ettirmek için çift çubuklu kontroller uyguladım. (İlk başta çift çubuklu bir nişancı oyunu oluşturma fikrini düşündüm. Ancak Mario ile bu mümkün olmadı).



Yapmak istediğim bir sonraki şey iskelet animasyonuna girmekti, bu yüzden Blender'ı açtım, bir dokunaç modeli oluşturdum ve ona ileri geri salınan iki kemikten oluşan bir iskelet ekledim.



Bu noktada OBJ formatını terk ettim ve kendi JSON dosyalarımı Blender'dan dışa aktarmak için bir Python betiği yazdım. Bu JSON dosyaları kaplamalı ağı, iskeleti ve animasyon verilerini tanımlıyordu. Bu dosyaları C++ JSON kütüphanesini kullanarak oyuna yükledim.



Her şey işe yaramaya başlayınca Blender'a geri döndüm ve daha ayrıntılı bir karakter yarattım (Bu, yaptığım ve hilesini yaptığım ilk 3D kişiydi. Bundan oldukça gurur duyuyordum.)



Önümüzdeki birkaç ay içinde şu adımları attım:

  • Vektörler ve matrislerle çalışmak için fonksiyonları kendi üç boyutlu matematik kütüphanemde ayırmaya başladım.
  • .xcodeproj bir CMake projesiyle değiştirildi
  • Visual Studio'da çalışmayı sevdiğim için motoru hem Windows hem de iOS'ta çalıştırdım.
  • Kodu ayrı "motor" ve "oyun" kütüphanelerine taşımaya başladık. Zamanla bunları daha da küçük kütüphanelere böldüm.
  • JSON dosyalarımı oyunun doğrudan yükleyebileceği ikili verilere dönüştürmek için ayrı bir uygulama yazdım.
  • Bir noktada tüm SDL kitaplıklarını iOS yapısından kaldırdım. (Windows yapısı hala SDL kullanıyor.)

Kilit nokta şudur: Programlamaya başlamadan önce motor mimarisini planlamadım. Bu bilinçli bir seçimdi. Bunun yerine, bir sonraki işlevsellik parçasını uygulayan mümkün olan en basit kodu yazdım ve ardından doğal olarak hangi mimarinin ortaya çıktığını görmek için ona baktım. "Motor mimarisi" derken, bir oyun motorunu oluşturan modüller kümesini, bu modüller arasındaki bağımlılıkları ve her modülle etkileşim kurmak için kullanılan API'yi kastediyorum.




Bu yaklaşımla çok fazla zaman kaybedilmiş gibi görünebilir çünkü her zaman kötü kod yazıyorsunuz ve daha sonra tamamen yeniden yazılması gerekiyor. Ancak değişikliklerin çoğu, kodun bir .cpp dosyasından diğerine taşınmasını, işlev tanımlarının .h dosyalarına çıkarılmasını veya eşit derecede basit diğer eylemleri içerir. Tanımlamak, Nerede ne yalan söylemesi gerektiği zor bir iştir ve kod zaten mevcut olduğunda çözülmesi daha kolaydır.


Bunun tam tersi bir yaklaşımla daha fazla zaman kaybedileceğine bahse girerim: İhtiyacınız olan her şeyi yapacak bir mimariyi önceden düşünmeye çalışmak. Aşırı mühendisliğin tehlikeleri üzerine en sevdiğim makalelerden ikisi Tomas Dabrowski'nin Genellemenin Kısır Döngüsü ve Joel Spolsky'nin Mimarlık Astronotlarının Sizi Korkutmasına İzin Vermeyin.


Sorunları kodda karşılaşmadan önce kağıt üzerinde çözmemeniz gerektiğini söylemiyorum. Ayrıca hangi işlevselliğe ihtiyacınız olduğuna önceden karar vermemeniz gerektiğini de söylemiyorum. Örneğin, motorun tüm kaynakları bir arka plan iş parçacığına yüklemesini istediğimi başından beri biliyordum. Motorum en azından bazı kaynakları yüklemeye başlayana kadar bu işlevselliği tasarlamaya veya uygulamaya çalışmadım.


Yinelemeli yaklaşım bana, bakarken hayal edebileceğimden çok daha zarif bir mimari kazandırdı. Boş sayfa kağıt. Bugünkü motorumun iOS yapısı, kendi matematik kitaplığı, konteyner şablonları, yansıma/serileştirme sistemi, işleme çerçevesi, fizik ve ses mikseri de dahil olmak üzere %100 orijinal koddan oluşuyor. Bu modüllerin her birini kendim yazmak için nedenlerim vardı ama bu sizin için gerekli olmayabilir. Bunun yerine, motorunuza uygun olabilecek birçok harika açık kaynak ve izin verilen lisanslı kitaplıklar vardır. GLM, Bullet Physics ve STB başlıkları ilginç örneklerden sadece birkaçı.

Çok fazla genelleme yapmadan önce iki kez düşünün

Programcılar olarak kod tekrarından kaçınmaya çalışıyoruz ve kodun tutarlı bir stil izlemesini seviyoruz. Ancak bu içgüdülerin tüm kararları yönlendirmesine izin vermemenin yararlı olduğunu düşünüyorum.

DRY prensibini zaman zaman kırın

Size bir örnek vereyim: motorum, std::shared_ptr ruhuna benzer şekilde akıllı işaretçilerden oluşan birkaç şablon sınıfı içeriyor. Her biri ham işaretçinin etrafında sarmalayıcı görevi görerek bellek sızıntılarını önlemeye yardımcı olur.

  • Sahip olunan<>Tek bir sahibi olan dinamik olarak tahsis edilmiş nesneler için.
  • Referans<>Bir nesnenin birden fazla sahibi olmasına izin vermek için referans sayımı kullanır.
  • ses::AppOwned<>ses mikserinin dışındaki kod tarafından kullanılır. Bu, oyun sistemlerinin, ses gibi ses mikserinin kullandığı nesnelere sahip olmasını sağlar. şu ançoğaltıldı.
  • ses::AudioHandle<>ses mikserinin içindeki bir referans sayma sistemini kullanır.

Bu sınıflardan bazıları, DRY ilkesini ihlal ederek diğerlerinin işlevselliğini kopyalıyor gibi görünebilir. Aslında geliştirmenin başlarında mevcut bir Reference sınıfını yeniden kullanmaya çalıştım.<>mümkün olduğu kadar. Bununla birlikte, bir ses nesnesinin kullanım ömrünün özel kurallara tabi olduğunu öğrendim: Nesne bir parçayı oynatmayı bitirmişse ve oyunda bu nesneye yönelik bir işaretçi yoksa, silinmek üzere hemen kuyruğa alınabilir. Oyun işaretçiyi yakaladıysa ses nesnesi silinmemelidir. Ve oyun işaretçiyi ele geçirdiyse ancak işaretçinin sahibi oyun bitmeden yok edilirse oyun iptal edilmelidir. Referansı karmaşıklaştırmak yerine<>, ayrı şablon sınıfları tanıtmanın daha pratik olacağına karar verdim.


Zamanın %95'inde mevcut kodu yeniden kullanmak doğru yoldur. Ancak bu sizi çıkmaza sokmaya başlarsa veya kendinizi bir zamanlar basit olan bir şeyi karmaşık hale getirirken bulursanız, kendinize kod tabanının bu kısmının gerçekten ikiye bölünmesi gerekip gerekmediğini sorun.

Farklı arama kurallarını kullanmak sorun değil

Java'nın sevmediğim yönlerinden biri de sizi bir sınıf içindeki her fonksiyonu tanımlamaya zorlaması. Bana göre bu anlamsız. Bu, kodunuza daha tutarlı bir görünüm verebilir, ancak aynı zamanda aşırı karmaşıklığı da teşvik eder ve daha önce anlattığım yinelemeli yaklaşımı desteklemez.


C++ motorumda bazı işlevler sınıflara aittir, bazıları değildir. Örneğin, oyundaki her düşman bir sınıftır ve beklediğiniz gibi çoğu düşman davranışı bu sınıfta uygulanır. Öte yandan, motorumda fizik ad alanındaki işlevler, küreCast() çağrılarak yürütülür. SphereCast() herhangi bir sınıfa ait değildir; yalnızca fizik modülünün bir parçasıdır. Modüller arasındaki bağımlılıkları yöneten ve kodu oldukça (benim için) iyi organize edilmiş tutan bir yapı sistemim var. Bu işlevi rastgele bir sınıfa sarmak, kodun organizasyonunu hiçbir şekilde iyileştirmez.



En azından gereksinimlerinizin ne kadar karmaşık olacağını hayal etmeye çalışın. Flappy Bird gibi birkaç varlıkla küçük bir oyun yapıyorsanız serileştirme hakkında muhtemelen fazla düşünmenize gerek kalmayacaktır. Muhtemelen dokuları doğrudan PNG'den yükleyebilirsiniz ve bu yeterli olacaktır. Kompakt, geriye dönük uyumlu bir ikili formata ihtiyacınız varsa ancak kendinizinkini geliştirmek istemiyorsanız, Cereal veya Boost.Serialization gibi üçüncü taraf kütüphanelere göz atın. Google Protokol Tamponlarının oyun varlıklarını serileştirmek için ideal olduğunu düşünmüyorum, ancak yine de keşfedilmeye değer.


Bir oyun motoru yazmak - küçük bile olsa - büyük bir girişimdir. Daha fazlasını söyleyebilirim ama dürüst olmak gerekirse en çok yararlı tavsiye Bu uzunluktaki bir makale için düşünebildiğim şey şudur: yinelemeli olarak çalışın, kodu genelleştirme dürtüsüne biraz direnin ve serileştirmenin geniş bir konu olduğunu unutmayın, dolayısıyla uygun bir strateji seçmeniz gerekir. Deneyimlerime göre, bu noktaların her biri göz ardı edilirse tökezleyen bir engel haline gelebilir.


Bu konuyla ilgili notları karşılaştırmayı seviyorum, bu nedenle diğer geliştiricilerin görüşlerini duymakla çok ilgileniyorum. Motoru siz yazdıysanız deneyiminiz aynı sonuçlara mı yol açtı? Henüz yazmadıysanız veya yazmayı planlıyorsanız, düşünceleriniz de benim için ilginç. İyi bir öğrenme kaynağı olarak neyi düşünüyorsunuz? Hangi yönler size hâlâ gizemli geliyor? Aşağıya yorum bırakmaktan veya benimle iletişime geçmekten çekinmeyin

Görüntüleme