Para uma explicação muito detalhada, recomendo a leitura da primeira e única Bíblia Game Engine Architecture de Jason Gregory. Eu acho que é o trabalho mais completo sobre esse tópico desde que foi publicado. Ele não lida apenas com a parte C ++, mas também é importante para todos os programadores de mecanismos de jogos que a teoria / arquitetura está por trás. É um bom ponto de partida independente do idioma. Para ter uma visão geral do que estamos falando, é esta imagem do livro
Deixe-me tentar responder à pergunta.
Tudo o que você escrever será código :-) depois de anos de experiência, escreva o que você precisa e como você precisa ou use o que fornece o que você precisa.
Os termos mecanismo e estrutura vêm da arquitetura de software, além de outros termos. Então, vamos começar com os termos básicos e vamos subir.
Biblioteca
Exemplos típicos: uma biblioteca matemática que fornece todos os tipos e funções básicos para cálculos matemáticos (vetor, matriz, ...) ou biblioteca de imagens (jpeg ou png), fornecendo a funcionalidade para gravar imagens jpeg ou png
No Unity 3D Math é uma biblioteca de matemática.
Teoria: uma biblioteca fornece recursos dedicados em torno de um tópico (por exemplo, matemática) E é chamado pelo programador sob demanda .
Uma prévia: pode haver bibliotecas contendo estruturas, também conhecidas como biblioteca de estruturas.
Estrutura
Teoria: Uma estrutura introduz uma inversão de controle . Isso significa que o desenvolvedor na maioria das vezes não chama os métodos da estrutura, mas a estrutura chama o código do desenvolvedor. As exceções são quando você precisa integrar a biblioteca da estrutura no seu código e precisa iniciar a estrutura. Uma biblioteca de estruturas fornece todos os métodos, funções e interfaces para uma estrutura com um uso dedicado. Portanto, as estruturas podem estar em uma biblioteca.
Exemplo típico: O Unity 3D MonoBehaviour fornece métodos como Desperta, Iniciar, OnUpdate. O desenvolvedor implementa esses métodos e, em seguida, esses métodos são chamados pela estrutura (gerenciamento de objetos de jogo) (essa é a inversão de controle) . O mesmo com os métodos OnCollisionEnter, OnCollisionExit. Eles estão no mesmo Monobehaviour, mas eu aposto que eles são chamados pela estrutura física.
Uma visualização: Mecanismo, Tempo de Execução, Editor, SDK
Como o termo mecanismo sempre foi meio vago e ainda é (e não melhora com novos desenvolvimentos tecnológicos), é uma explicação prévia.
O termo mecanismo é usado para várias coisas e não se pode dizer com exclusividade qual é o correto. Em 2004, quando eu tive contato com a criação de mecanismos de jogos, era vago também. Você tinha um mecanismo de jogo no sentido de algum tipo de código que carrega dados predefinidos e permite jogar. Como ele carrega dados predefinidos, eles foram chamados de mecanismos controlados por dados. Você os compila uma vez e os dados externos podem ter sido jogos diferentes sem recompilá-los. Em algum momento, foi o mesmo que um tempo de execução.
O editor é claro. Permite definir os dados predefinidos carregados pelo mecanismo / tempo de execução.
Um mecanismo com um editor foi chamado SDK (por exemplo, Hammer SDK).
Então havia / são motores dedicados. Um mecanismo phyiscs, mecanismo de renderização, mecanismo de som, mecanismo de gerenciamento de objetos de jogo, mecanismo de rede, ....
Na minha opinião pessoal, esses não são mecanismos (especialmente um mecanismo de renderização NÃO É um mecanismo de jogo, pois apenas renderiza). Quando eu google no mecanismo de jogo, os resultados contêm 90% de mecanismos de renderização puros que não são mecanismos de jogo. Eu chamaria todas elas de bibliotecas, mas como elas podem carregar dados predefinidos, elas corresponderiam ao termo mecanismo orientado a dados.
Uma última nota curta antes de entrarmos em detalhes: me formei com sucesso com um mestrado em ciência da computação. Minha tese de mestrado tratou do tópico "como desenvolver o núcleo de um mecanismo de jogo". Significa a parte do código que une todos os outros mecanismos, faz o gerenciamento de objetos do jogo, o loop do jogo, etc.
Publiquei minha tese de mestrado como um livro (curto). O único comentário na Amazon de um comprador / leitor é (após alguns anos): não se trata de um mecanismo de jogo. Desde que me formei com sucesso e, portanto, defendi minha tese contra 3 programadores experientes (2 deles dedicados a jogos e aplicativos interativos), acho que escrevi um mecanismo de jogo.
editor
Fácil: permite definir os dados no formato exigido pelas outras partes e, portanto, elimina a demanda de gravar esses arquivos manualmente ou usar ferramentas externas para criá-los.
É isso que o editor do Unity 3D faz.
Tempo de execução
Esse termo geralmente é usado igualmente com o mecanismo (que pode estar correto ou incorreto).
O tempo de execução executa os dados gerados e faz o que tem a ver com os dados. Por exemplo, mostre o jogo e deixe-o jogar. Ele não cria nenhum dado (exceto, talvez, salvar jogos) no sentido de que você não pode modificar o jogo em si.
O Unity Web Player é / foi um tempo de execução que permite jogar jogos do Unity em um navegador da web.
Você pode carregar e executar vários jogos diferentes com o mesmo tempo de execução.
No caso da API de script do Unity 3D, há um corte entre a funcionalidade que funcionará no jogo e a funcionalidade que funcionará apenas no editor.
SDK
Este termo também é chamado de estrutura .
Naquela época, um SDK era um pacote de ferramentas como um editor, IDE (ambiente de desenvolvedor integrado) para programadores, exportadores de formatos de dados e o tempo de execução / mecanismo.
Portanto, um SDK / framework fornece um fluxo de trabalho e utilitários predefinidos e mostra uma maneira (bem projetada) de como você pode (facilmente) criar um jogo.
Basicamente, o mecanismo Unity 3D estaria errado, pois se encaixaria mais na direção do SDK. Mas como o Unity é ainda mais necessário, é necessária uma nova palavra / definição para corresponder ao que é.
De qualquer forma, para introduzir o outro termo, um SDK / framework fornece a você um pipeline de desenvolvimento de jogos predefinido (não apenas um pipeline de ativos, mas talvez, como o Unity, um pipeline de ativos, lógica, builds, implantações, ...)
Motor
sarcasmo on Usado para tudo, pois todo mundo quer ser legal escrevendo não apenas uma biblioteca, uma estrutura ou um jogo, mas melhor escrevendo um mecanismo completo. sarcasmo
Vamos acioná-lo:
Um motor
- é um pedaço de código / software
- ele deve ser reutilizado em vários projetos (você também pode escrever um mecanismo de jogo para apenas um jogo)
- por ser reutilizado, o mecanismo de jogo separa a parte reutilizável da parte específica do jogo
- por ser reutilizável (dependendo de como se destina a ser reutilizado), existem diferentes tipos, como um mecanismo controlado por dados que carrega dados externos
Um mecanismo pode consistir em vários outros mecanismos (já que hoje em dia tudo é chamado de mecanismo). Um mecanismo de jogo pode incluir
- um mecanismo de renderização fazendo a renderização (NOVAMENTE: deus, caramba, inferno: o código que faz apenas renderização NÃO É um mecanismo de jogo)
- um mecanismo de física fazendo a física (é um mecanismo de física, não um mecanismo de jogo)
- um mecanismo de IA manipulando as coisas de IA (é um mecanismo de IA e não um mecanismo de jogo)
- um mecanismo de rede (por exemplo, RakNet) fazendo as coisas de rede (é um mecanismo de rede, não um mecanismo de jogo)
- um mecanismo de áudio fazendo o material de áudio (é um mecanismo de áudio e não um mecanismo de jogo)
Um exemplo de aplicativo baseado em um mecanismo principal que fornece uma estrutura baseada em plug-in para reunir tudo em um modelo de gerenciamento de objeto de jogo baseado em componente. Cada sub-mecanismo (renderizando áudio) é um módulo adicionado ao mecanismo de jogo como plug-in. Cada componente pode fazer parte de um sub-mecanismo / módulo. E o gerenciamento de objetos de jogo (baseado em componentes) é o elo de conexão entre os módulos separados.
A definição mais próxima para Game Engine
Um mecanismo de jogo é a parte do código-fonte do seu jogo que fornece todas as funcionalidades que devem ser reutilizadas em vários jogos e permite codificar e executar seu jogo. Portanto, ele reúne todas as outras partes do código (renderização, áudio, física, gerenciamento de objetos de jogos, redes) que são bibliotecas, estruturas ou mecanismos dedicados (renderização, física, ...).
O mecanismo do jogo é a bagunça no meio.