Gerçekten detaylı bir açıklama için, tek ve tek incil Oyun Motoru Mimarisi Jason Gregory tarafından okunmasını tavsiye ederim . Sanırım yayınlandığından bu konuyla ilgili en kapsamlı çalışma. Sadece C ++ kısmını değil aynı zamanda her oyun motoru programcısı için arkasındaki teori / mimariyi de önemsiyor. Dilden bağımsız iyi bir başlangıç noktası. Ne hakkında konuştuğumuza genel bir bakış için kitaptan bu resim var
Soruyu cevaplamaya çalışmama izin ver.
Ne yazarsanız yazınız, kod yıllarca sürecek deneyimlerden sonra, ihtiyacınız olanı ve nasıl ihtiyacınız olduğunu yazın ya da ihtiyacınız olanı sağlayın.
Terimleri motor ve çerçeve başka terimlerle birlikte yazılım mimarisi gelir. Öyleyse temel terimlerle başlayalım, yukarı doğru hareket edelim.
Kütüphane
Tipik örnekler: matematiksel hesaplamalar (Vector, Matrix, ...) ya da jpeg ya da png görüntülerini yazma işlevini sağlayan tüm temel tür ve işlevleri sağlayan bir matematik kütüphanesi ya da jpeg ya da png görüntülerini yazma işlevini sağlayan bir kitaplık
Birlikte 3D Matematik bir matematik kütüphanesidir.
Teori: Bir libray bir konunun etrafında özel özellikler sağlar (örn. Matematik) VE talep üzerine programcı tarafından çağrılır .
Bazı önizleme: çerçeveleri tutan kütüphaneler olabilir yani aka çerçeve kütüphanesi olmak.
iskelet
Teori: Bir çerçeve kontrolün ters çevrilmesini sağlar . Bu, geliştiricinin çoğu zaman çerçeve yöntemlerini değil, çerçeveyi geliştiricinin kodunu çağırması anlamına gelir. İstisnalar, çerçeve kütüphanesini kodunuza entegre etmeniz ve çerçeveyi başlatmanız gerektiğidir. Bir çerçeve kütüphanesi, özel bir kullanımı olan bir çerçeve için tüm yöntemleri ve işlevleri ve arayüzleri sağlar. Yani çerçeveler bir kütüphanede olabilir.
Tipik örnek: Unity 3D MonoBehaviour , Awake, Start, OnUpdate gibi yöntemler sağlar. Geliştirici bu yöntemleri uygular ve daha sonra bu yöntemler (oyun nesnesi yönetimi) çerçevesi tarafından çağrılır (kontrolün tersidir) . OnCollisionEnter, OnCollisionExit yöntemleri ile aynı. Aynı Monobehaviour'dalar, ancak bahse girerim fizik çerçevesi tarafından çağrılırlar.
Bir önizleme: Motor, Çalışma Zamanı, Editör, SDK
Motor terimi her zaman belirsiz olduğundan ve hala (ve daha ileri teknolojik gelişmelerle daha iyi olmadığından) bir önizleme açıklaması olduğu için.
Motor terimi birçok şey için kullanılır ve hangisinin doğru olduğu benzersiz olarak söylenemez. 2004 yılında oyun motorlarıyla ilk temasa geçtiğimde de belirsizdi. Önceden tanımlanmış verileri yükleyen bir çeşit kod anlamında bir oyun motorunuz vardı ve oyunu oynamanıza izin veriyorsunuz. Önceden tanımlanmış veri yüklediğinden, veri odaklı motorlar olarak adlandırıldı. Onları bir kez derlersin ve harici veriler onu tekrar derlemeden farklı oyunlar olabilirdi. Bir noktada, bu bir çalışma zamanı gibi aynıydı.
Editör temiz. Motor / çalışma zamanı tarafından yüklenen önceden tanımlanmış verileri tanımlamanızı sağlar.
Editörlü bir motora SDK adı verildi (örneğin Hammer SDK).
Sonra özel motorlar vardı. Bir phyiscs motoru, render motoru, ses motoru, gameobject yönetim motoru, ağ motoru, ....
Benim görüşüme göre bunlar motor değil (özellikle render motoru, sadece render olduğu için oyun motoru DEĞİLDİR). Oyun motoruna gittiğimde, sonuçlar oyun motorları olmayan% 90 saf render motorları içeriyor. Tüm kütüphaneleri arayacaktım ama önceden tanımlanmış verileri yükleyebildiklerinden, veri güdümlü motor terimi ile eşleşeceklerdi.
Ayrıntılara girmeden önce son bir kısa not: Bilgisayar bilimleri dalında yüksek lisans derecesiyle başarılı bir şekilde mezun oldum. Yüksek lisans tezim "oyun motorunun çekirdeğini nasıl geliştireceğimi" konusunu ele aldı. Diğer tüm motorları bir araya getiren kodun bir parçası, oyunun nesne yönetimi, oyun döngüsü vb.
Yüksek lisans tezimi (kısa) bir kitap olarak yayınladım. Amazon hakkında bir alıcı / okuyucudan gelen tek yorum (birkaç yıl sonra): bu bir oyun motoruyla ilgili değil. Başarılı bir şekilde mezun olduğum ve bu yüzden tezimi 3 deneyimli programcıya (2 tanesi oyunlara ve etkileşimli uygulamalara adanmış) karşı savunduğum için sanırım bir oyun motoru yazdım.
Editör
Kolay: Verileri diğer parçaların gerektirdiği biçimde tanımlamanıza izin verir ve bu dosyaları el ile yazma talebini ortadan kaldırır veya bunları oluşturmak için harici araçları kullanır.
Unity 3D editörünün yaptığı budur.
Süre
Bu terim genellikle motorla eşit olarak kullanılır (doğru veya yanlış olabilir).
Çalışma zamanı, oluşturulan verileri yürütür ve verilerle ne yapması gerektiğini yapar. Örneğin size oyunu gösterin ve oyunu oynamanıza izin verin. Oyunun kendisi ile değişiklik yapamamanız anlamında herhangi bir veri oluşturmaz (belki oyun kaydetme hariç).
Unity Web Player, bir web tarayıcı içinde Unity oyunlarını oynamanıza izin veren bir çalışma zamanıdır.
Aynı çalışma zamanı ile birden fazla farklı oyunu yükleyebilir ve çalıştırabilirsiniz.
Unity 3D komut dosyası API'si söz konusu olduğunda, oyunda çalışacak olan işlevsellik ile yalnızca editör içinde çalışacak olan işlevsellik arasında bir kesim vardır.
SDK
Bu terime genellikle çerçeve de denir .
O zamanlar bir SDK bir editör, programcılar için IDE (entegre geliştirici ortamı), veri biçimleri için ihracatçılar ve çalışma zamanı / motor gibi bir araç demeti haline geldi.
Böylece, bir SDK / framework size önceden tanımlanmış bir iş akışı ve yardımcı programlar sunar ve size bir oyuna nasıl kolay bir şekilde yaratabileceğinizi (iyi tasarlanmış) bir yolla gösterir.
Temelde Unity 3D motor, SDK yönüne daha fazla sığacağı için yanlış olurdu. Ancak Birlik daha da fazla olduğu için, onunla eşleşmesi için yeni bir kelime / tanım gerekir.
Her neyse, diğer terimi tanıtmak için, bir SDK / framework size önceden tanımlanmış bir oyun geliştirme boru hattı sağlar (sadece bir varlık boru hattı değil, belki de Unity gibi, varlık, mantık, yapı, dağıtım, vb. İçin bir boru hattı).
Motor
alay etmek Her şey için kullanılır, çünkü herkes sadece bir kütüphane, çerçeve ya da oyun yazarak değil, aynı zamanda daha iyi bir motor yazarak da havalı olmak ister. alay etmek
Aşağı tetikleyelim:
Bir motor
- bir kod / yazılım parçasıdır
- birden fazla projede tekrar kullanılması amaçlanmaktadır (ayrıca sadece bir oyun için bir oyun motoru yazabilirsiniz)
- Yeniden kullanıldıkları için oyun motoru yeniden kullanılabilir kısmı oyuna özgü kısımlardan ayırır.
- yeniden kullanılabilir olması için (nasıl kullanılması amaçlandığına bağlı olarak) harici veri yükleyen veri odaklı bir motor gibi farklı tatlar vardır.
Bir motor diğer çoklu motorlardan oluşabilir (bugünlerde her şey bir motor olarak adlandırılmaktadır). Bir oyun motoru içerebilir
- render yapan bir render motoru (TEKRAR: kahretsin, kahretsin, cehennem: sadece render yapan kod bir oyun motoru DEĞİLDİR)
- fiziği yapan bir fizik motoru (bu bir fizik motoru, oyun motoru değil)
- AI işlerini idare eden bir AI motoru (bu bir AI motoru ve oyun motoru değil)
- ağ şeylerini yapan bir ağ motoru (örneğin RakNet) (bir ağ motoru, oyun motoru değil)
- ses şeylerini yapan bir ses motoru (bu bir ses motoru, oyun motoru değil)
Bileşen tabanlı bir oyun nesnesi yönetim modelinde herşeyi bir araya getirmek için eklenti tabanlı bir çerçeve sağlayan bir çekirdek motoru temelli bir uygulamaya örnek. Her alt motor (ses oluşturma), oyun motoruna fiş olarak eklenen bir modüldür. Her bileşen bir alt motorun / modülün parçası olabilir. Ve (bileşen tabanlı) oyun nesnesi yönetimi, ayrılan modüller arasındaki bağlantıdır.
Game Engine için en yakın tanım
Bir oyun motoru , oyununuzun kaynak kodunun , birden fazla oyunda yeniden kullanılması amaçlanan tüm işlevleri sağlayan ve oyununuzu kodlamanıza ve yürütmenize izin veren parçasıdır . Bu nedenle , kütüphane, çerçeveler veya özel motorlar (render, fizik, ...) gibi kodun diğer tüm bölümlerini (render, ses, fizik, oyun nesnesi yönetimi, network) bir araya getirir .
Oyun motoru ortadaki karmaşa.