Testei várias arquiteturas para fazer jogos. Aqui está o que aprendi.
“No fim do dia, os jogadores só querem se divertir. Mas nós, devs, queremos mais: queremos entender, melhorar e evoluir nosso código.”
🎮 A motivação: encontrar a arquitetura ideal
Durante muito tempo, meu objetivo como desenvolvedor de jogos não era só fazer um jogo divertido. Era também entender como organizar meu código de forma escalável e fácil de manter, mesmo quando o escopo começasse a crescer (e sabemos que ele sempre cresce).
Então tive uma ideia: fazer o mesmo jogo em várias arquiteturas diferentes, para descobrir qual se encaixava melhor nos seguintes critérios:
- Ser fácil de manter
- Ter escalabilidade
- Ser bom para debug
- Ser organizado
Fiz esse experimento algumas vezes. Os dois padrões que mais me agradaram foram:
- Entity Component System (ECS), usando Flecs
- Scriptable Object Architecture, ou SOAP, no Unity
📚 O acaso encontra o método: Simon Nordon
Recentemente, encontrei os artigos de Simon Nordon no Medium. E pra minha surpresa, ele teve a mesma ideia que eu: desenvolver o mesmo jogo usando diferentes arquiteturas e comparar o resultado.
O estudo de caso sobre Vampire Survivors foi simplesmente fantástico. Me lembrou muito a estrutura de código dos meus primeiros jogos — como o Nino Maze Lofi, claro um belo espaguete.
🍝 O espaguete pode ser gostoso… até virar indigestão
No artigo “Desenvolvendo o jogo usando o código espaguete”, Simon começa pelo básico: fazer um jogo do jeito mais direto possível, sem grandes preocupações com padrões de arquitetura. Algo que eu mesmo fiz diversas vezes.
E sabe de uma coisa? Funciona.
- Para projetos pequenos, é ótimo.
- É rápido, fácil, e você vê resultados logo.
- E no final do dia, os jogadores não se importam com seu código, e sim com o jogo ser jogável e divertido.
Mas, à medida que o projeto cresce… Modificar algo se torna um pesadelo. Adicionar uma nova feature é como jogar Jenga com nitroglicerina. Foi nesse momento que Simon chega à mesma conclusão que eu: o código espaguete cobra seu preço.
🧬 Tentando aplicar ECS… sem ECS?
Um dos artigos que mais me surpreendeu foi o da análise de Soulstone Survivors. Nele, Simon mostra como os desenvolvedores tentaram aplicar ideias de ECS sem usar um ECS real.
Isso é interessante porque mostra uma tendência comum: muitos devs querem os benefícios do ECS (composição, performance, separação de responsabilidades), mas sem abrir mão da familiaridade da Unity tradicional.
Resultado? Uma gambiarra híbrida que não entrega nem a simplicidade da POO, nem a performance do ECS. E é por isso que, quando bem aplicado, um ECS como o Flecs brilha.
⚙️ GameObject Component Pattern: bonito, mas lento
Outro artigo essencial foi o sobre o GameObject Component Pattern. Simon mostra como aplicar um padrão mais limpo e modular usando GameObjects e componentes no estilo Unity padrão.
Só que ele também relata algo que eu mesmo vivi:
“Levei dois meses a mais para finalizar o jogo. Estava exausto.”
Ele conclui com uma frase sensacional:
“Tinha deixado de usar o código espaguete, mas continuava usando o cérebro espaguete.”
Ou seja: o problema não era só a arquitetura, mas como ele estava abordando a arquitetura. A mentalidade também precisa mudar, não só o padrão de projeto.
🧾 Scriptable Object Pattern: potencial subutilizado
O artigo sobre o Scriptable Object Pattern acabou ficando um pouco aquém dos outros. Faltaram métricas e comparações consistentes. Mas ainda assim, traz bons insights.
O uso de ScriptableObjects resolve muitos problemas comuns, como o abuso de Singletons. É fácil de usar, funciona bem com designers, e torna o sistema mais modular.
Mas há desvantagens claras:
- Cria uma quantidade enorme de arquivos no projeto.
- Muito precisa ser feito manualmente no editor, o que pode ser cansativo e propenso a erro.
Mesmo assim, SOAP ainda é uma das arquiteturas mais promissoras que usei.
🤷♂️ Faltou o mais importante: ECS de verdade
Senti falta de um artigo do Simon abordando o uso real de ECS, com métricas e estrutura comparável. Seria muito interessante ver uma análise usando Flecs, ou outro sistema de ECS.
Por quê?
Porque ECS muda tudo: a forma de pensar, programar, debugar, organizar. Não é só um padrão. É uma nova mentalidade. E compará-lo lado a lado com POO, scriptable objects ou código espaguete poderia revelar ainda mais insights para a comunidade.
🧠 Conclusão: o código importa, sim
Simon tem razão: jogadores não se importam com seu código.
Mas você, como desenvolvedor, deveria se importar. Porque é você que vai manter esse código por meses (ou anos). É você que vai debugar às 3 da manhã. É você que vai tentar adicionar um modo cooperativo faltando 1 semana pro lançamento.
E aí, vai querer fazer isso num castelo de cartas?
Pra mim, a resposta tem sido clara:
Use código espaguete para protótipos. Use ECS ou SOAP para jogos sérios.