17 de agosto de 2020

pensamentos sobre godot vs. unity

eu recém terminei o meu primeiro jogo em Godot, e depois de 5 anos mexendo exclusivamente em Unity, tenho opiniões.

no começo eu estava detestando porque o paradigma "node-based" da Godot não tava fazendo sentido nenhum pra mim, e parecia que tinham construído uma engine propositalmente imbecil pra me sacanear. mas depois de seguir os tutoriais eu tive o momento galaxy brain e comecei a entender como tudo funciona, e daí pra frente foi smooth sailing.

principal vantagem: é consideravelmente mais rápido fazer certas coisas em Godot do que em Unity. dois fatores principais: (1) os editores, e (2) as linguagens de programação.

não é nenhuma novidade que o editor da Unity é pesado:

  1. ele demora minutos para abrir.
  2. o play demora 5~10 segundos.
  3. toda vez que você salva um script, é preciso esperar 5~10 segundos para dar play novamente.
  4. pra debuggar, é preciso instalar uma extensão e dar play em dois lugares diferentes.
  5. de vez em quando, o intellisense do VSCode simplesmente demora minutos pra carregar.

nenhuma dessas esperas é particularmente interminável, mas elas vão se somando com o passar do tempo e vão criando um certo "atrito" na engine, um sentimento de que as coisas são mais lentas do que o necessário. talvez tudo isso seja rápido num desktop bom, mas no meu notebook demora. a presença volumosa da Unity é palpável.

em comparação, o editor da Godot é mais leve:

  1. ele pesa 60mb (só o pacote de exportação pra Mac da Unity pesa 2gb).
  2. o play ainda demora alguns segundos, mas é notavelmente mais rápido (2 ou 3, ao invés de 5~10).
  3. a edição de scripts é instantânea - na verdade, você pode editar os scripts enquanto o jogo roda (hot-reloading).
  4. adicionar breakpoints é rápido e simples.
  5. o próprio editor de código está embutido na engine.

tudo isso contribui para uma experiência suave, fluida. o atrito do editor da Godot é mínimo.

mas ainda tem a questão das linguagens.

GDScript é Python, basicamente, então é rápido de se programar igual Python. no tempo que um programador Godot leva para programar a movimentação do jogador, o programador Unity ainda está escrevendo "GetComponentWithChildren<Collider2D>();". a tipagem dinâmica elimina certas responsabilidades do programador, e torna tudo mais suave. não tem muito o que dizer além disso. perto de GDScript, C# parece desnecessariamente burocrático.

então beleza, até agora a Godot é muito mais rápida e suave do que a Unity. mas ela também tem as suas desvantagens. três, em particular:

  1. o próprio GDScript. a tipagem dinâmica é uma benção mas também é uma maldição: o código se rende à macarronada mais fácil. não é que seja difícil escrever código bom em GDScript, mas é consideravelmente mais fácil de escrever código merda.

  2. a comunidade. a Unity tem uma comunidade há mais de uma década, e isso é aparente: parece que toda dúvida que você pode vir a ter já foi perguntada e respondida dezenas de vezes diferentes nos últimos anos. não só dúvidas, mas questões mais complexas como por exemplo "qual a melhor forma de implementar um [roguelike / platformer / match-3]?". em Godot, isso não é tão verdade: certas perguntas que parecem "óbvias" só tem um resultado no Google, esse tipo de co,isa. e a documentação, apesar de decente, nem sempre ajuda (dado que em alguns casos, você não sabe o que procurar!)

  3. certas features simplesmente não estão implementadas ainda. então às vezes acontece uma situação engraçada: você procura no google "how to do X in godot" e começa a chorar quando percebe que o primeiro resultado é uma issue do GitHub, ainda aberta, cuja conclusão basicamente é "isso é impossível de fazer na versão Y, vamos botar no roadmap". isso também acontece ocasionalmente na Unity, mas minha impressão é que na Godot esse evento é um pouco mais comum.

(exemplos para os interessados: dar "rescale" em animation frames. adicionar colisão a múltiplos tiles simultaneamente, no auto-tile. polifonia no AudioStreamPlayer. etc.)

em resumo: a Godot oferece uma experiência mais fluida e gostosa, mas às vezes te força a caminhar um pouco no escuro, e não te protege do seu próprio código.

também é importante comentar que eu acho a Godot muito mais bonita do que a Unity. não só o editor, mas também a logo, o nome, e o fato de ter sido iniciada por 2 hermanos (latin america represent!)

eu pretendo continuar mexendo com godot? por enquanto sim, os prós superam os contras. talvez chegue o dia em que eu comece a fazer um projeto mais longo e fique frustrado com as deficiências da engine, frustrado com a incapacidade dela te me impedir de escrever código merda. esse dia talvez nunca chegue. por enquanto, terei o prazer de continuar brincando com ela.

p.s.: eu sei que dá pra escrever em C# na Godot, mas eu não vou tenho interesse em fazer isso por enquanto já que GDScript é o "padrão" e eu não faço ideia do quão bem-suportadas são essas linguagens "adicionais".