Minha trajetória trabalhando com diferentes ferramentas de desenvolvimento de jogos
Tags: gamedev, godot, unity3d
Published: 2023-09-17 15:40:56

Sou programador profissional à 6 anos, sendo os últimos 2 anos trabalhando no desenvolvimento de jogos. Não estou contando o tempo que estive na faculdade, apenas o período posterior, quando comecei a de fato trabalhar com programação profissionalmente sem ser estágio.

No início, quando estava na faculdade aprendendo a programar, comecei fazendo jogos em [XNA](https://en.wikipedia.org/wiki/Microsoft_XNA), ferramenta desenvolvida pela Microsoft que foi descontinuada em 2013 apesar do sucesso que estava tendo; Bastion, Stardew Valley e Magicka são alguns grandes sucessos feitos em XNA. XNA era uma ferramenta muito boa, é um [framework (e não uma engine)](https://gamedeveloper.com.br/como-ser-um-programador-de-jogos-engine-vs-framework/index.html) para você programar em C# e ter acesso à tudo o que um jogo precisa, já fez um game loop pronto com `start`, `update` e `draw` para você adicionar o código que precisar e já vem com uma tela azul então você não precisa instancializar uma janela e tudo o mais do zero.
Com o fim do XNA fiquei órfão de ferramenta para trabalhar com jogos mas por coincidência isso aconteceu no período que eu estava trabalhando desenvolvimento web e mobile, então não tive que escolher outra ferramenta na época.
Eu sei que tem muita gente que [criava jogos e animações em Flash](https://www.kaspersky.com.br/blog/life-and-death-of-adobe-flash/20207/) que sabe como é esse sentimento de perder a sua ferramenta de trabalho.
Desde essa época já vi que nenhuma ferramenta dura para sempre e é sempre bom termos alternativas e aprender conceitos que servirão de base para usar qualquer ferramenta.

Em 2019 quando voltei a mexer com jogos porque queria participar de game jams escolhi [Love 2D](https://love2d.org/) como minha ferramenta de trabalho, de novo outro framework pois eu já tinha tentado trabalhar com Unity e Unreal mas não tinha me acostumado ao fluxo de trabalho de mexer numa engine com interface gráfica própria e tudo o mais, eu preferia a liberdade de fazer tudo no código, sem precisar aprender detalhes específicos da ferramenta.
A Love2D me chamou bastante atenção por ser muito simples e bastante extensível, assim como a [linguagem de programação Lua](https://pt.wikipedia.org/wiki/Lua_(linguagem_de_programa%C3%A7%C3%A3o)), foi um perído bem legal onde eu desenvolvi vários joguinhos e tive que programar vários sistemas neles, dado a natureza da Love2D de não entregar muita coisa pronta. Para você ter uma ideia, criar um simples botão na tela é algo que não tem pronto no framework, você precisa criar o seu próprio botão renderizando um texto na tela, desenhando uma caixa em volta dele e fazendo o clique dentro daquela área chamar o callback do botão, depois estilizando para deixar com o visual que quiser, modificando o visual do ponteiro do mouse, colocando uma cor diferente na caixa quando o mouse estiver por cima, etc.
O legal de usar uma ferramenta assim na minha opnião é que você sente que pode fazer qualquer coisa, por mais que dê trabalho, você nunca ficará travado porque a ferramenta não tem algo que você precisa ou porque ela te força a fazer as coisas de um certo jeito que tornará muito mais complicado do que o necessário para fazer o que você quer.
Se não ficou claro até agora, sim eu tenho um carinho especial pela Love2D, eu gosto de ferramentas simples que te dão liberdade para fazer as coisas como você quer, é pelo mesmo motivo que gosto muito do [Excalidraw](https://excalidraw.com/) para criar diagramas visuais. O fato de ser grátis e de código aberto é uma grande vantagem também.

A partir de 2023 decidi aprender [Unity](https://unity.com/pt) e focar nela como minha ferramenta de trabalho para desenvolver jogos. Essa decisão foi movida principalmente pelo fato de ser a engine mais popular com a maior comunidade e permitir criar qualquer tipo de jogo. Por mais que eu ainde goste de ferramentas mais simples e frameworks, percebi que trabalhar com jogos é algo complexo por si só e adicionar mais complexidade desnecessária de fazer a sua própria engine ou de ter que criar seus próprios sistemas básicos de câmera, UI, etc num framework são coisas que muito boas para aprendizado mas diminuem significamente a velocidade de produção de jogos.
Trabalhar com uma engine também é muito bom para colaboração, pois tira o gargalo do programar ter que mexer no código para fazer qualquer alteração pequena no jogo, desde adicionar novos assets até mudar o balanceamento de uma simples variável. Numa engine moderna como Unity, Unreal ou Godot toda a equipe consegue colocar a mão na engine e fazer o seu trabalho ali mesmo, sem precisar pedir tudo para a equipe de programação, isso é uma grande mudança de paradigma na indústria de jogos que ocorreu nos últimos tempos.

A partir de setembro de 2023 decidi sair da Unity e pivotar totalmente para [Godot](https://godotengine.org/), após as péssimas escolhas da empresa por trás da Unity, falarei mais sobre isso num próximo artigo.

Também mexi com outras ferramentas para desenvolvimento de jogos mas não falei muito sobre elas aqui porque não fiz muita coisa nelas, no máximo um único jogo. Mas acho legal incluí-las aqui para demonstrar que as minhas escolhas de ferramenta foram feitas com base em bastante estudo e pensando nos prós e contras de cada uma.
Aqui está uma lista das que me lembro, sem ordem específica:
- [Allegro](https://liballeg.org/)
- [Phaser](https://phaser.io/)
- [Unreal Engine](https://www.unrealengine.com/pt-BR)
- [Construct](https://www.construct.net/en)
- [Gamemaker](https://gamemaker.io/en)