Filosofia de Design do Godot

Agora que você já deu uma mergulhada no assunto, vamos falar no design do Godot.

Cada game engine é diferente e atende a diferentes necessidades. Além de oferecer uma variedade de recursos, o design de cada engine é único. Isso leva a diferentes fluxos de trabalho e diferentes formas de formar as estruturas de seus jogos. Tudo isso decorre de suas respectivas filosofias de design.

Esta página está aqui para ajudá-lo a entender como funciona o Godot, começando com alguns de seus fundamentos. Não é uma lista de funcionalidades disponíveis, nem uma comparação entre game engines. Para saber se alguma game engine é uma boa escolha para seu projeto, você mesmo precisa testá-las e entender seu design e limitações.

Por favor assista Godot explicado em 5 minutos se você estiver procurando por uma visão geral das funcionalidades da game engine.

Design orientado a objetos e composição

Godot adota o design orientado a objetos em seu núcleo, com seu sistema de cena flexível e hierarquia de Nós. Ele tenta ficar longe de padrões estritos de programação para oferecer uma maneira intuitiva de estruturar seu jogo.

Por um lado, Godot permite compor ou agregar cenas. É como prefabs aninhados: você pode criar uma cena BlinkingLight e uma cena BrokenLantern que usa o BlinkingLight. Em seguida, crie uma cidade repleta de BrokenLanterns. Mude a cor do BlinkingLight, salve e todos os BrokenLanterns na cidade serão atualizados instantaneamente.

Além disso, você pode herdar de qualquer cena.

Uma cena Godot pode ser uma Arma, um Personagem, um Item, uma Porta, um Nível, parte de um nível... qualquer coisa que você quiser. Funciona como uma classe em código puro, exceto que você é livre para projetá-la usando o editor, usando apenas o código ou misturando e combinando os dois.

É diferente dos prefabs encontrados em vários engines 3D, pois você pode herdar e estender essas cenas. Você pode criar um Mago que amplie seu Personagem. Modifique o Personagem no editor e o Mago também será atualizado. Isso ajuda você a construir seus projetos para que sua estrutura corresponda ao design do jogo.

imagem0

Observe também que Godot oferece muitos tipos diferentes de objetos chamados nós, cada um com uma finalidade específica. Os nós fazem parte de uma árvore e sempre herdam de seus pais até a classe Node. Embora o mecanismo apresente alguns nós como formas de colisão que um corpo físico pai usará, a maioria dos nós funciona independentemente um do outro.

Em outras palavras, os nós do Godot não funcionam como componentes de algumas outras game engines.

imagem1

Sprite é um Node2D, um CanvasItem e um Node. Ele tem todas as propriedades e recursos de suas três classes principais, como transformações ou a capacidade de desenhar formas personalizadas e renderizar como um sombreador(shader) personalizado.

Pacote com tudo incluído

Godot tenta fornecer suas próprias ferramentas para atender às necessidades mais comuns. Possui um editor de script dedicado, um editor de animação, um editor de tilemap, um editor de shader, um depurador, um criador de perfil, a capacidade de rodar localmente e em dispositivos remotos, etc.

imagem2

O objetivo é oferecer um pacote completo para criar jogos e uma experiência de usuário contínua. Você ainda pode trabalhar com programas externos desde que exista um plugin de importação para ele. Ou você pode criar um, como o Tiled Map Importer.

Também é por isso que a Godot oferece suas próprias linguagens de programação GDScript e VisualScript, juntamente com C#. Elas são projetados para as necessidades de desenvolvedores e designers de jogos e são totalmente integradas ao engine e ao editor.

O GDScript permite que você escreva código usando uma sintaxe baseada em recuo, mas detecta tipos e oferece a qualidade de preenchimento automático de uma linguagem estática. Também é otimizado para código de jogo com tipos integrados como Vetores e Cores.

Observe que com o GDNative, você pode escrever código de alto desempenho usando linguagens compiladas como C, C++, Rust ou Python (usando o compilador Cython) sem recompilar a engine.

imagem3

VisualScript é uma linguagem de programação baseada em nós que se integra bem ao editor. Você pode arrastar e soltar nós ou recursos no gráfico para criar novos blocos de código.

Observe que o espaço de trabalho 3D não possui tantas ferramentas quanto o espaço de trabalho 2D. Você precisará de programas externos ou complementos para editar terrenos, animar caracteres complexos e assim por diante. O Godot fornece uma API completa para estender a funcionalidade do editor usando o código do jogo. Confira O editor do Godot é um jogo do Godot.

imagem4

Um plug-in do editor State Machine no Godot 2 por kubecz3k. Ele permite que você gerencie estados e transições visualmente.

Aviso

`Godot 4.0 vai remover o VisualScript de toda sua base. <https://godotengine.org/article/godot-4-will-discontinue-visual-scripting>`__Como resultado, criar novos projetos utilizando visual script no Godot não é recomendado. Futuras versões do Godot 4.x podem ter o VisualScript reimplementado como uma extensão.

Apesar do Godot 3.x manter o suporte ao VisualScript, recomendamos experimentar GDScript especialmente se você pretende migrar seu projeto para o Godot 4.

Código aberto

O Godot oferece uma base de código totalmente aberto sob a licença MIT. Isso significa que todas as tecnologias que acompanham o produto têm que ser Livres (como em liberdade) também. Na maior parte, elas são codificadas do zero pelos colaboradores.

Qualquer um pode conectar ferramentas proprietárias em seus projetos - elas só não vêm junto com o motor do Godot. Isso pode incluir NViDia PhysX, o Google Admob ou um importador de arquivos FBX. Qualquer um destes pode vir como plugins de terceiros.

Por outro lado, uma base de código aberta significa que você pode aprender e estender a engine como desejar. Você também consegue depurar jogos facilmente, pois o Godot irá mostrar erros com um rastreamento de pilha, mesmo se eles vierem da própria engine.

Nota

Isso não afeta o trabalho que você faz com o Godot de maneira alguma: não há strings anexadas à engine ou qualquer coisa que você faça com ela.

Orientada pela comunidade

O Godot é feito por sua comunidade, para a comunidade e para todos os criadores de jogos. São as necessidades dos usuários e as discussões abertas que geram as principais atualizações. Novas funcionalidades dos principais desenvolvedores geralmente focam no que beneficiará a maioria dos usuários em primeiro lugar.

Dito isso, embora um punhado de desenvolvedores principais trabalhe nele em tempo integral, o projeto tem mais de 600 colaboradores no momento desta redação. Os programadores benevolentes trabalham em recursos de que eles próprios precisam, portanto, você verá melhorias em diversos recursos da engine ao mesmo tempo e em todas as versões principais.

O editor do Godot é um jogo do Godot

O editor do Godot é executado na engine de jogo. Ele usa o próprio sistema de interface do usuário da engine, pode recarregar códigos e cenas ao testar seus projetos ou executar códigos de jogos no editor. Isso significa que você pode usar o mesmo código e cenas para seus jogos ou construir plug-ins e estender o editor.

Isso leva a um sistema de interface de usuário (UI) confiável e flexível, pois aciona o próprio editor. Com a palavra-chave tool, você pode executar qualquer código de jogo no editor.

imagem5

RPG in a Box é um editor de RPG voxel feito no Godot 2. Ele usa as ferramentas de Interface com Usuário do Godot para seu sistema de programação baseada em nós e para o resto da interface.

Coloque a palavra-chave tool na parte superior de qualquer arquivo GDscript e ela será executada no editor. Isso permite importar e exportar plug-ins, criar plug-ins como editores de nível personalizados ou criar scripts com os mesmos nós e API que você usa em seus projetos.

Nota

O editor é inteiramente escrito em C++ e é compilado estaticamente num binário. Isso significa que você não consegue importa-lo como um objeto qualquer que teria um arquivo project.godot.

Engine 2D e 3D separados

O Godot oferece mecanismos dedicados de renderização 2D e 3D. Como resultado, a unidade base para cenas 2D é pixels. Mesmo que os mecanismos sejam separados, você pode renderizar 2D em 3D, 3D em 2D e sobrepor sprites 2D e fazer a interface em seu mundo 3D.