Voltar para o Blog
Quest Log

Como Organizar um Projeto Godot: Estrutura de Pastas Que Escala

Árvore de pastas de um projeto Godot organizada por feature no FileSystem dock do editor

Aprenda a organizar projeto Godot com uma estrutura de pastas que escala: por feature ou por tipo, convenções de nomes, autoloads, .gitignore e checklist.

Como Organizar um Projeto Godot: Estrutura de Pastas Que Escala

Todo projeto começa igual: meia dúzia de arquivos na raiz, player.tscn do lado de teste_final2.gd, e tudo funciona. Três meses depois são 300 arquivos, você gasta mais tempo procurando sprite do que fazendo jogo, e mover qualquer coisa de lugar é roleta russa. Organizar um projeto Godot não é capricho de programador arrumadinho: é infraestrutura. Esse guia mostra uma estrutura de pastas que escala, as convenções de nome que a própria documentação da Godot recomenda e as regras práticas pra bagunça não voltar.

Por que projeto desorganizado mata jogo

A desorganização cobra em três parcelas, e a última é a mais cara.

Primeiro, você para de achar as coisas. Cada "onde eu salvei aquele som de pulo?" custa dois minutos. Parece pouco, mas acontece dezenas de vezes por sessão, e cada interrupção dessas tira você do fluxo. O custo real não é o tempo de procurar, é o raciocínio que se perde no meio.

Segundo, mover arquivo quebra referência. Cenas (.tscn) e recursos (.tres) guardam os caminhos dos arquivos de que dependem, tipo res://sprites/slime.png. Se você arrasta esse PNG pra outra pasta pelo explorador do sistema, a Godot não fica sabendo, e na próxima vez que abrir o projeto vai te receber com aviso de dependências quebradas. Em projeto bagunçado, ninguém move nada por medo, e a bagunça se torna permanente.

Terceiro, o projeto morre no HD. É a soma das duas anteriores. Cada sessão começa com atrito, o atrito vira desânimo, o intervalo entre as sessões aumenta, e num certo ponto você nem lembra mais como o projeto funciona por dentro. Poucos jogos indie morrem por falta de talento; a maioria morre por atrito acumulado.

As duas filosofias de estrutura de pastas no Godot

Existem basicamente duas escolas pra estruturar o res://, e vale conhecer as duas antes de escolher.

Organização por tipo agrupa os arquivos pelo formato deles:

res://
├── scenes/
│   ├── player.tscn
│   ├── slime.tscn
│   └── main_menu.tscn
├── scripts/
│   ├── player.gd
│   ├── slime.gd
│   └── main_menu.gd
├── sprites/
│   ├── player.png
│   └── slime.png
└── audio/
    ├── jump.wav
    └── menu_theme.ogg

É a estrutura que quase todo iniciante cria por instinto, e ela até funciona em projeto pequeno. O problema aparece quando o jogo cresce: pra mexer no slime, você abre scenes/, depois scripts/, depois sprites/. Uma feature fica espalhada em quatro pastas, e cada pasta vira um saco com dezenas de arquivos de features diferentes misturados.

Organização por feature agrupa por parte do jogo:

res://
├── player/
│   ├── player.tscn
│   ├── player.gd
│   └── player.png
├── enemies/
│   ├── slime/
│   │   ├── slime.tscn
│   │   ├── slime.gd
│   │   └── slime.png
│   └── bat/
├── levels/
│   └── level_01/
├── ui/
│   └── main_menu/
│       ├── main_menu.tscn
│       ├── main_menu.gd
│       └── menu_theme.ogg
├── autoload/
└── shared/

Minha recomendação honesta: por feature, sem drama. O motivo é um princípio simples: tudo que muda junto fica junto. Quando você mexe no slime, a cena, o script e o sprite mudam juntos, então devem morar juntos. Quer apagar o slime do jogo? Apaga uma pasta e acabou, sem caçar arquivo órfão em scripts/ e sprites/. Quer levar o player pra um protótipo novo? Copia uma pasta. A estrutura por tipo responde "que formato esse arquivo tem", uma pergunta que você nunca faz. A por feature responde "de que parte do jogo isso é", a pergunta que você faz o tempo todo.

A exceção justa: em game jam ou protótipo de fim de semana com 20 arquivos, qualquer estrutura serve, e por tipo não atrapalha. Mas se o projeto tem ambição de virar jogo de verdade, comece por feature. Migrar depois custa muito mais caro.

Próximo nível
Quer aprender isso na prática?

No CursoGame.Dev você sai dos tutoriais soltos e constrói jogos publicáveis, com trilha progressiva, quests práticas e feedback real.

Conhecer a plataforma
+500 alunos4.9/5Garantia 7 dias

As convenções de nome que a Godot recomenda de verdade

Isso não é opinião minha: está na documentação oficial de estilo da engine.

Arquivos e pastas em snake_case: tudo minúsculo, palavras separadas por underscore. player_controller.gd, main_menu.tscn, slime_idle.png. A razão é prática, não estética: Windows trata Player.tscn e player.tscn como o mesmo arquivo, Linux trata como dois arquivos diferentes. Um projeto com maiúsculas misturadas pode funcionar na sua máquina e quebrar na exportação ou na máquina de outra pessoa. Minúsculo em tudo elimina essa classe inteira de problema.

Nós e class_name em PascalCase: cada palavra com inicial maiúscula, seguindo as classes da própria engine (CharacterBody2D, AnimationPlayer). Ou seja, o arquivo player_controller.gd declara a classe PlayerController:

# player_controller.gd
class_name PlayerController
extends CharacterBody2D

@export var speed: float = 220.0
@export var jump_force: float = 480.0

E a regra que importa mais que qualquer outra: consistência vale mais que a convenção escolhida. Se o seu projeto já tem 200 arquivos em outro padrão, padronizar tudo de uma vez é receita de referência quebrada. Adote a convenção nos arquivos novos e renomeie os antigos aos poucos, sempre pelo editor.

Autoloads, recursos compartilhados e a pasta addons

Três casos não pertencem a nenhuma feature específica e merecem um lugar próprio.

Autoloads e singletons vão numa pasta autoload/ na raiz (ou globals/, os dois nomes são comuns na comunidade). São os scripts registrados nas configurações do projeto pra existirem durante o jogo inteiro: estado global, gerenciador de áudio, sistema de save. Ter todos num lugar só deixa explícito o que é global no seu projeto, e isso importa porque autoload demais é cheiro de arquitetura ruim. Se o tema é novo pra você, o guia de autoloads na Godot explica quando usar e quando evitar.

Recursos compartilhados vão em shared/ (ou common/): a fonte usada no jogo inteiro, a paleta de cores, shaders genéricos, sons de interface. A regra de bolso: se duas ou mais features usam, o arquivo sobe pra shared/. Se só uma usa, fica na pasta da feature.

A pasta addons/ é território da engine: é onde os plugins baixados da Asset Library são instalados. Não guarde os seus arquivos lá dentro. Misturar código seu com plugin de terceiro torna impossível atualizar ou remover o plugin depois sem medo de perder alguma coisa junto.

Mova arquivo sempre dentro do editor

Essa regra sozinha paga o artigo: renomeie e mova arquivos pelo FileSystem dock, dentro do editor da Godot, nunca pelo explorador do sistema.

Quando você arrasta um arquivo de uma pasta pra outra no FileSystem dock, a engine varre as cenas e os recursos que apontam pra ele e atualiza os caminhos. Mover slime.png de lugar atualiza a referência dentro de slime.tscn automaticamente. Fazendo o mesmo no Explorer do Windows, a Godot só descobre depois do fato, e aí é você quem conserta dependência quebrada na mão, arquivo por arquivo.

Um detalhe das versões recentes: a partir do Godot 4.4, scripts e shaders ganham um arquivo .uid do lado (player.gd.uid). É um identificador único que ajuda a engine a manter as referências mesmo quando caminhos mudam. Esses arquivos vão pro repositório junto com o código, e se algum dia você mover algo por fora do editor, mova o .uid junto.

O .gitignore essencial do Godot 4

Projeto de jogo sem controle de versão é projeto com prazo de validade, então assumo que o seu está no Git. O que muita gente erra é o que versionar. No Godot 4, a regra número um: a pasta .godot/ nunca vai pro repositório. Ela é cache gerado pela engine, com os assets importados e metadados do editor, e é recriada do zero em qualquer máquina que abrir o projeto. Versionar a .godot/ incha o repositório e gera conflito de merge em arquivo que nem é seu.

Um .gitignore mínimo e suficiente pra começar:

# cache gerado pela engine, recriado automaticamente
.godot/

# credenciais de exportação (senhas de keystore etc.)
export_credentials.cfg

# builds exportadas
build/

E um aviso sobre assets grandes: Git não foi feito pra binário pesado. Sprite e som pequenos tudo bem, mas vídeo, PSD gigante e áudio sem compressão degradam o repositório rápido. A solução padrão é o Git LFS, e o guia de controle de versão pra jogos com Git e LFS mostra a configuração completa pra Godot.

Checklist pra começar organizado

Pra fechar, o roteiro que eu sigo em todo projeto novo, na ordem:

  • Criar o projeto e, antes de qualquer cena, o .gitignore com a .godot/ ignorada
  • Fazer o primeiro commit só com a estrutura, pra ter um ponto de partida limpo
  • Criar as pastas raiz: uma por feature inicial (player/, levels/, ui/), mais autoload/ e shared/
  • Decidir a convenção de nomes (snake_case em arquivo e pasta, PascalCase em nó e class_name) e anotar num README curto
  • Toda feature nova nasce como pasta própria, com cena, script e assets juntos
  • Asset usado por duas ou mais features sobe pra shared/
  • Renomear e mover sempre pelo FileSystem dock, nunca pelo explorador
  • Revisar a estrutura a cada marco do projeto: pasta que virou saco de gatos é sinal de feature que merece subpastas

Nada disso exige ferramenta nova nem plugin: é decisão tomada cedo e mantida com disciplina. Estrutura de pastas é daquelas coisas que ninguém elogia quando está certa, mas que decide se o seu projeto sobrevive ao mês três. E se você está montando essa base agora e quer aprender a engine com método em vez de tutorial solto, veja o guia do melhor curso de Godot pra entender como o CursoGame.Dev estrutura esse caminho do zero ao jogo publicado.

Perguntas frequentes

Como organizar as pastas de um projeto Godot?

Crie uma pasta por feature do jogo (player/, enemies/, ui/) e guarde junto tudo que pertence àquela feature: cena, script e assets. Complete com autoload/ para os singletons, shared/ para recursos usados no projeto inteiro e deixe addons/ só para plugins. Essa estrutura escala melhor que separar por tipo de arquivo.

Devo colocar scenes e scripts em pastas separadas?

Não precisa e, na maioria dos projetos, não compensa. Separar scenes/ e scripts/ obriga você a navegar em duas árvores para mexer em uma coisa só. Manter player.tscn e player.gd na mesma pasta deixa cada feature autocontida e facilita achar, mover e apagar sem deixar arquivo órfão para trás.

O que é a pasta .godot e por que ela não vai para o Git?

A .godot/ é o cache que a engine gera ao importar assets e abrir o projeto no Godot 4. Ela é recriada automaticamente em qualquer máquina, então nunca deve ser versionada. Adicione .godot/ ao .gitignore logo no primeiro commit; versionar essa pasta incha o repositório e causa conflitos sem sentido.

Posso mover arquivos do projeto fora do editor da Godot?

Evite. Cenas e recursos guardam referências por caminho, e mover ou renomear arquivos no explorador do sistema quebra essas referências. Mova sempre pelo FileSystem dock, dentro do editor, que a Godot atualiza as dependências automaticamente em todas as cenas e recursos que apontam para o arquivo.

Que convenção de nomes usar nos arquivos da Godot?

Siga o padrão da documentação oficial: snake_case para arquivos e pastas (player_controller.gd, main_menu.tscn) e PascalCase para nomes de nós e class_name (PlayerController). Nomes minúsculos sem espaço evitam problemas entre Windows e Linux na exportação. Consistência importa mais que a regra escolhida.