Per una spiegazione davvero dettagliata ti consiglio di leggere l'unica bibbia di Game Engine Architecture di Jason Gregory. Immagino sia il lavoro più completo su questo argomento da quando è stato pubblicato. Gestisce non solo la parte C ++ ma anche e importante per ogni programmatore di motori di gioco la teoria / architettura alla base. È un buon punto di partenza indipendente dalla lingua. Per avere una visione d'insieme di cosa stiamo parlando è questa immagine del libro
Lasciami provare a rispondere alla domanda.
Qualunque cosa tu scriva, sarà un codice :-) dopo anni di esperienza, scrivi ciò di cui hai bisogno e come ne hai bisogno o usa ciò che ti fornisce ciò di cui hai bisogno.
I termini motore e framework derivano dall'architettura software insieme ad altri termini. Quindi cominciamo con i termini di base e spostiamoci verso l'alto.
Biblioteca
Esempi tipici: una libreria matematica che fornisce tutti i tipi e le funzioni di base per i calcoli matematici (Vector, Matrix, ...) o la libreria di immagini (jpeg o png) che fornisce la funzionalità per la scrittura di immagini jpeg o png
In Unity 3D Math è un libray matematico.
Teoria: un libray fornisce funzioni dedicate intorno a un argomento (ad esempio matematica) E viene chiamato dal programmatore su richiesta .
Qualche anteprima: ci possono essere librerie che contengono framework, ovvero una libreria di framework.
Struttura
Teoria: un framework introduce un'inversione di controllo . Ciò significa che lo sviluppatore il più delle volte non chiama i metodi del framework ma il framework chiama il codice dello sviluppatore. Le eccezioni sono quando devi integrare la libreria del framework nel tuo codice e devi avviare il framework. Una libreria di framework fornisce tutti i metodi, le funzioni e le interfacce per un framework con un uso dedicato. Quindi i framework possono essere in una libreria.
Esempio tipico: Unity 3D MonoBehaviour fornisce metodi come Awake, Start, OnUpdate. Lo sviluppatore implementa questi metodi e quindi questi metodi vengono chiamati dal framework (game object management) (questa è l'inversione del controllo) . Lo stesso con i metodi OnCollisionEnter, OnCollisionExit. Sono nello stesso comportamento monocromatico, ma scommetto che sono chiamati dal framework fisico.
Un'anteprima: Engine, Runtime, Editor, SDK
Poiché il termine motore è sempre stato piuttosto vago e lo è ancora (e non migliora con ulteriori sviluppi tecnologici) alcune spiegazioni in anteprima.
Il termine motore è usato per più cose e non si può dire in modo univoco quale sia giusto. Nel 2004, quando ho avuto il primo contatto con la scrittura di motori di gioco, era anche vago. Avevi un motore di gioco nel senso di una sorta di codice che caricava dati predefiniti e ti consentiva di giocare. Poiché carica dati predefiniti, sono stati chiamati motori basati sui dati. Li compili una volta e i dati esterni avrebbero potuto essere giochi diversi senza ricompilarli. Ad un certo punto questo era lo stesso di un runtime.
L'editor è chiaro. Ti consente di definire i dati predefiniti caricati dal motore / runtime.
Un motore con un editor era chiamato SDK (ad esempio Hammer SDK).
Quindi c'erano / sono motori dedicati. Un motore phyiscs, un motore di rendering, un motore audio, un motore di gestione degli oggetti di gioco, un motore di rete, ....
Secondo la mia opinione personale, questi non sono motori (in particolare un motore di rendering NON È un motore di gioco poiché esegue solo il rendering). Quando utilizzo il motore di gioco di Google, i risultati contengono motori di rendering puri al 90% che non sono motori di gioco. Vorrei chiamare tutte queste librerie ma poiché potrebbero caricare dati predefiniti corrisponderebbero al termine motore basato sui dati.
Un'ultima breve nota a margine prima di entrare nei dettagli: mi sono laureato con successo con un master in informatica. La mia tesi di laurea ha trattato l'argomento "come sviluppare il nucleo di un motore di gioco". Significa la parte del codice che identifica tutti gli altri motori, fa la gestione degli oggetti di gioco, il loop di gioco, ecc ...
Ho pubblicato la mia tesi di laurea come un (breve) libro. L'unico commento su Amazon da parte di un acquirente / lettore è (dopo alcuni anni): non si tratta di un motore di gioco. Da quando mi sono laureato con successo e quindi ho difeso la mia tesi contro 3 programmatori esperti (2 dei quali dedicati a giochi e applicazioni interattive), credo di aver scritto un motore di gioco.
editore
Semplice: consente di definire i dati nel formato richiesto dalle altre parti e quindi elimina la richiesta di scrivere manualmente quei file o utilizzare strumenti esterni per crearli.
Questo è ciò che fa l'editor Unity 3D.
Runtime
Questo termine viene spesso usato allo stesso modo con il motore (che può essere corretto o errato).
Il runtime esegue i dati generati e fa ciò che ha a che fare con i dati. Ad esempio, mostrarti il gioco e lasciarti giocare. Non crea alcun dato (tranne forse il salvataggio di giochi) nel senso che non è possibile modificare il gioco stesso con esso.
Unity Web Player è / era un runtime che ti consente di giocare ai giochi Unity in un browser web.
Puoi caricare ed eseguire più giochi diversi con lo stesso runtime.
Nel caso dell'API di scripting Unity 3D esiste un taglio tra funzionalità che funzionerà nel gioco e funzionalità che funzionerà solo all'interno dell'editor.
SDK
Questo termine viene spesso chiamato anche quadro .
All'epoca un SDK era un insieme di strumenti come un editor, IDE (ambiente di sviluppo integrato) per programmatori, esportatori di formati di dati e runtime / motore.
Quindi un SDK / framework ti fornisce un flusso di lavoro e utility predefiniti e ti mostra un modo (ben progettato) di come puoi (facilmente) creare un gioco.
Fondamentalmente il motore Unity 3D sarebbe sbagliato dal momento che si adatterebbe di più nella direzione dell'SDK. Ma poiché Unity è ancora di più, è necessaria una nuova parola / definizione per abbinare ciò che è.
Ad ogni modo, per introdurre l'altro termine, un SDK / framework fornisce una pipeline di sviluppo di giochi predefinita (non solo una pipeline di risorse ma forse, come Unity, una pipeline di risorse, logica, build, implementazioni, ....)
Motore
sarcasmo su Usato per tutto poiché tutti vogliono essere cool scrivendo non solo una libreria, un framework o un gioco, ma meglio scrivendo un motore completo. sarcasmo fuori
Attiviamolo:
Un motore
- è un pezzo di codice / software
- è destinato a essere riutilizzato in più progetti (puoi anche scrivere un motore di gioco per un solo gioco)
- per essere riutilizzato, il motore di gioco separa la parte riutilizzabile dalla parte specifica del gioco
- per essere riutilizzabili (in base al modo in cui è previsto il riutilizzo) esistono diversi gusti come un motore basato su dati che carica dati esterni
Un motore può essere composto da più motori (dal momento che tutto è chiamato un motore al giorno d'oggi). Un motore di gioco può includere
- un motore di rendering che esegue il rendering (DI NUOVO: dannazione, inferno: il codice che esegue solo il rendering NON È un motore di gioco)
- un motore fisico che fa la fisica (è un motore fisico, non un motore di gioco)
- un motore AI che gestisce le cose AI (è un motore AI e non un motore di gioco)
- un motore di rete (ad esempio RakNet) che fa le cose di rete (è un motore di rete, non un motore di gioco)
- un motore audio che fa le cose audio (è un motore audio e non un motore di gioco)
Un esempio per un'applicazione basata su un motore principale che fornisce un framework basato su plug-in per mettere insieme tutto in un modello di gestione degli oggetti di gioco basato su componenti. Ogni sottomarino (rendering audio) è un modulo aggiunto al motore di gioco come plug-in. Ogni componente può far parte di un sottomarino / modulo. E la gestione degli oggetti di gioco (basata su componenti) è il collegamento di collegamento tra i moduli separati.
Il definon più vicino per Game Engine
Un motore di gioco è la parte del codice sorgente del gioco che fornisce tutte le funzionalità che devono essere riutilizzate in più giochi e che consentono di codificare ed eseguire il gioco. Pertanto indaga insieme tutte le altre parti del codice (rendering, audio, fisica, gestione degli oggetti di gioco, reti) che sono librerie, framework o motori dedicati (rendering, fisica, ...).
Il motore di gioco è nel bel mezzo.