Bir oyun çerçevesi ile oyun motoru arasındaki fark nedir?


23

Bir oyun çerçevesi (örneğin, C # ile XNA, c ++ için SDL) ve bir oyun motoru arasındaki fark nedir?

Oyun çerçeveleri motor kullanıyor mu? Bir oyun motoru, fizik motorları, parçacık motorları vb. Gibi alt motorları kapsıyor mu? Birlikte mi kullanılmalılar, yoksa karşılıklı olarak mı?

2B ve 3B için ayrı motorlar var.


Yanıtlar:


21

Gerçekten "motor" veya "çerçeve" için kesin tanımlar yoktur.

Genel olarak konuşursak, bir motorun "daha fazla şey yaptığı" veya bir çerçeveden daha fazla araç ve ilgili desteğe sahip olduğu kabul edilir, bu genellikle birleşik bir API tarafından maruz bırakılan ilgili işlevsellikten oluşan bir koleksiyondur.

Bu amaçla, motor olduğunu iddia eden şeyler, işlevsellik elde etmek için çerçeveler olduğunu iddia eden şeyleri kullanabilir, ancak bunun her zaman böyle olması gerekmez. Benzer şekilde, bir oyun motoru olduğunu iddia eden bir şey, onun kurucu kısımlarının (fizik ve görüntü oluşturma, vb.) Bir fizik motoru veya fizik çerçevesiyle uygulandığını iddia edebilir. Her iki terimle de ifade edilen teknoloji türleri, birbirlerinin yerine kullanılabilir veya kullanılamaz.

Fizik, ses ve evet, hatta 2D veya 3D grafikler - hemen hemen her şey için "motorlar" veya "çerçeveler" olabilir.

Bu gerçekten sadece bir terminoloji meselesi ve genellikle fazla bir önemi yok. Bir işlevsellik perspektifinden, oyununuzu yapmaya odaklanmış bir perspektif, önemli olan, söz konusu teknolojinin oyununuzu yapmak için neye ihtiyacınız olduğunu sağlayıp sağlamadığıdır. Kendisine bir motor mu yoksa bir çerçeve mi diyorsun, bunun üzerinde bir etkisi olmayacak.


11

Kullandığım basit tanım: bir çerçeve üzerinde bir motor oluşturabilirsiniz, ancak bir motor üzerinde asla bir çerçeve oluşturamazsınız. Biri mimariyi ve program akışını belirleyen iskelet, diğeri işi yapan kas.

Somut bir örnek olarak, Artemis, komponent sistemleri inşa etmek için temiz ve küçük bir çerçevedir, ancak bunu asla bir motor olarak adlandırmazsınız. Ondan bir motor oluşturmak için Artemis Sistemlerini ve standart bileşenleri oluşturabilirsiniz.


1
Şirketimde biri motor üzerinde bir çerçeve tasarladı. Bu çerçeve, motorun sağlamadığı eksik parçaların bir koleksiyonu olarak işlev görür, (eski) motorumuzda biraz düzensiz olan şeyleri birleştirir. Ve dev kolaylaştırmak için yardımcıları sağlar.
v.oddou

2

Bir çerçeve (genellikle) daha düşük seviyeli kütüphaneler ve istediğiniz cehennemi (grafik, ses vb.) Yapmak için kullanabileceğiniz yardımcı materyaller koleksiyonudur. Bir çerçeve hakkında oyunla ilgili hiçbir şey yoktur, ancak oyunlarda yaygın olan şeyleri yapmak için genellikle optimize edilmeleri veya tasarlanmaları dışında.

Örnek: bir motor, her biri harita üzerinde konum alan bir varlık listesine sahip olmanızı sağlar. Çerçeve, 3B nesneyi belirli bir konumda oluşturmanıza olanak sağlar.

Böylece, varlıklarınızın her birine bir 3B nesne vererek bağlanır ve gerektiğinde bunları oluşturur.

Ve ta-da, senin bir oyunun var.


2

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

  1. bir kod / yazılım parçasıdır
  2. birden fazla projede tekrar kullanılması amaçlanmaktadır (ayrıca sadece bir oyun için bir oyun motoru yazabilirsiniz)
  3. Yeniden kullanıldıkları için oyun motoru yeniden kullanılabilir kısmı oyuna özgü kısımlardan ayırır.
  4. 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.

görüntü tanımını buraya girin


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.



0

@Josh'ın daha önce de belirtildiği gibi, çerçeve veya motorun kesin bir tanımı yoktur, ancak kavramsal olarak her ikisi de çok farklı araçlardır.

Bir çerçeve, çalışacak temel API soyutlamasını içerir, kullanıcılara platform veya işlevsellik ile etkileşime girmeleri için (genel olarak) performans, uyumluluk vb. Hakkında endişe etmeden higer düzeyinde araçlar sağlar. Verdiğiniz örneklerde, SDL bir çerçevedir. platformun üzerinden geçiyorsunuz ve yazılımınızı pencere yönetimi, işletim sistemi için özel şeyler vb. hakkında endişelenmeden yazılımın bu katmanın arkasına oluşturabilirsiniz. Yazılımın tamamını oluşturmak istiyorsanız, farklı çerçevelere ihtiyacınız olacak, medyayı yönetmek için SDL ve platform malzemesi, Box2D fizik vb.

Bir motor farklıdır, bu durumda, araç geliştirme için ihtiyaç duyulan her şeyi sunar, bir fizik motoru size fiziği yönetmek için gereken her şeyi sağlar ve kullanımı kolay bir API gönderir, bu nedenle, bir fizik simülasyonu oluşturmak istiyorsanız başka bir üçüncü taraf kütüphanesine ihtiyaç duymayacaksınız. Motorlar, başka üçüncü taraflara ihtiyaç duymadan ya da daha düşük seviyeli şeylerden endişe etmeden projeyi tamamlamak için gereken her şeyi sağlayan bir çerçeveler, diğer motorlar, arayüzler, pasajlar ve genel kodlardan ibaret değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.