Prefab na Unity: Criar, Editar e Reaproveitar Objetos

Unity prefab do jeito certo: criar arrastando para o Project, editar no Prefab Mode, aplicar e reverter overrides e entender por que a mudança não propaga.
Prefab na Unity: Criar, Editar e Reaproveitar Objetos
Prefab na Unity é um GameObject salvo como asset que serve de molde: você monta o inimigo uma vez, arrasta para a janela Project e passa a ter um arquivo que gera quantas cópias quiser, todas ligadas ao original. Mudou o molde, mudaram as cópias. O tropeço clássico de quem começa com Unity prefab é editar a cópia da cena e descobrir que as outras não mudaram, e este guia resolve exatamente isso.
Você vai criar um prefab, editar no Prefab Mode isolado e em contexto, entender o negrito e a linha azul dos overrides, aplicar e reverter, aninhar prefabs e saber quando faz sentido desempacotar. Tudo com os nomes de menu do Unity 6.3 LTS. A criação de cópias por código (Instantiate) fica para outro post; aqui o foco é o prefab em si.
O que é prefab na Unity
Imagine uma moeda num jogo de plataforma: um sprite, um CircleCollider2D marcado como trigger, um script que soma pontos e um som. Você precisa de duzentas moedas espalhadas por dez fases. Sem prefab, cada moeda é um objeto independente, e no dia em que você decide trocar o som, são duzentas edições.
Com prefab, a moeda vira o arquivo Coin.prefab. Cada moeda da cena é uma instância desse arquivo. A instância guarda só o que é dela (posição, rotação, e qualquer valor que você sobrescrever) e herda o resto do asset. Trocar o som é abrir o prefab, mudar o campo e salvar: as duzentas moedas recebem o som novo.
Na Hierarchy, instâncias de prefab aparecem com ícone de cubo azul e nome em azul. Objeto comum fica com nome branco ou preto, conforme o tema do editor. Esse detalhe visual é o primeiro diagnóstico de qualquer problema com prefab: se o nome não está azul, você não está mexendo num prefab.
Criando um prefab arrastando para o Project
O caminho mais direto:
- Monte o objeto na cena. Para a moeda: GameObject > 2D Object > Sprites > Circle, adicione um Circle Collider 2D com Is Trigger marcado e o seu script de coleta.
- Crie uma pasta
Assets/_Project/Prefabsna janela Project. - Arraste o objeto da Hierarchy para essa pasta.
A Unity cria Coin.prefab e transforma o objeto da cena numa instância (o nome fica azul). Agora arraste o prefab da pasta para a cena várias vezes, ou selecione uma instância e duplique com Ctrl+D: cada cópia continua ligada ao asset.
Se você arrastar para o Project um objeto que já é instância de prefab, a Unity pergunta se você quer criar um prefab original novo ou uma variante. Variante é um prefab que herda de outro e muda só alguns campos, assunto do post sobre Prefab Variant na Unity. Para um objeto novo, escolha o original.
Uma regra que poupa dor de cabeça: o prefab não pode guardar referência para objetos da cena. Se o script da moeda tem um campo [SerializeField] private Transform player; e você arrasta o Player da cena para ele numa instância, isso funciona naquela instância, mas o asset do prefab não consegue guardar esse vínculo. Referências dentro do próprio prefab (filhos, componentes dele) e para assets do Project funcionam sempre.
Prefab Mode: editando isolado ou em contexto
Prefab Mode é o modo em que você edita o asset em si, não uma cópia. Há dois jeitos de entrar.
Isolado (isolation): dê duplo clique em Coin.prefab na janela Project, ou selecione o asset e clique em Open no Inspector. A cena some, a Hierarchy mostra só os objetos do prefab e o Scene view usa um ambiente de edição neutro (por padrão, o skybox padrão; dá para trocar por uma cena sua em Project Settings > Editor > Prefab Mode). É o modo certo para mexer em Transform, colliders e filhos sem distração.
Em contexto (in context): selecione uma instância na cena e clique em Open no Inspector, aperte P, ou clique na setinha ao lado do nome da instância na Hierarchy. O prefab abre com o resto da cena visível ao fundo, mas não editável. No topo do Scene view, o seletor Context controla como o fundo aparece: Normal, Gray (o padrão) ou Hidden. Serve para ajustar o visual do prefab vendo onde ele vai ficar, como o tamanho de uma porta em relação ao corredor. Segundo o manual, os valores de Transform da raiz não podem ser alterados nesse modo; para isso, abra isolado.
No canto superior direito do Scene view fica o Auto Save. Ligado, cada mudança vai direto para o asset. Desligado, a Unity pergunta se você quer salvar ao sair. Em prefabs grandes, que demoram para salvar, vale desligar. Para sair do Prefab Mode, use a seta de voltar no cabeçalho da Hierarchy ou clique no nome da cena na trilha (breadcrumb) do topo do Scene view.
Overrides: aplicar, reverter e entender o negrito azul
Override é qualquer diferença entre a instância e o prefab. Mude o Scale de uma moeda da cena para 2 e repare no Inspector: o campo fica em negrito, com uma linha azul na margem esquerda. Componente adicionado só na instância ganha um sinal de mais no ícone; componente removido, um sinal de menos. Objeto filho adicionado na instância aparece com o mais na Hierarchy.
Esse negrito é a resposta para "por que minha mudança no prefab não chegou nesta cópia?". Campo com override não escuta mais o prefab. Se você trocar a cor no asset e a instância tiver override de cor, ela continua com a cor dela.
Para resolver, você tem três ferramentas:
- Menu Overrides do Inspector. Com a raiz da instância selecionada, abra o dropdown Overrides (no bloco Prefab, no topo do Inspector). Ele lista tudo que difere do asset e tem os botões Apply All (leva tudo para o prefab) e Revert All (descarta tudo e volta ao prefab).
- Clique direito num campo. Sobre um campo em negrito, o menu de contexto oferece aplicar aquele valor ao prefab ou reverter só ele.
- Menu de três pontos do componente. Para componente adicionado, removido ou modificado, o menu do componente traz as opções Added Component, Removed Component ou Modified Component, cada uma com Apply e Revert.
Hábito que recomendo: antes de dar Apply All, abra a lista do Overrides e leia. É comum ter um override esquecido de posição de filho ou de valor de teste, e o Apply All leva tudo junto para as duzentas moedas.
Juntar prefabs, cenas, scripts e dados num jogo completo, com cada mudança indo para o lugar certo, é onde muita gente que aprende por vídeo solto se perde: cada aula resolve um pedaço e ninguém mostra como o projeto inteiro se organiza do primeiro objeto até a build.
Prefab dentro de prefab (nested)
Prefab pode conter instâncias de outros prefabs. Um prefab Room pode ter três Coin, uma Door e um Enemy dentro dele. Cada um continua ligado ao seu próprio asset: trocar o som da moeda no Coin.prefab atualiza as moedas dentro de todas as salas.
Isso permite montar o jogo em camadas. A sala é um prefab, o andar é um prefab de salas, a fase é uma cena com andares. Quando você abre Room.prefab no Prefab Mode e muda uma moeda lá dentro, essa mudança vira override da moeda dentro da sala (não do Coin.prefab). Se você quer mudar todas as moedas do jogo, edite o Coin.prefab. Se quer mudar só as moedas daquela sala, edite dentro da sala. Saber em qual nível você está editando é o que separa um projeto que escala de um que vira caça ao override. Essa organização em peças reutilizáveis é a mesma lógica de composição discutida em padrões de projeto em jogos.
Desempacotar (Unpack) e quando fazer isso
Desempacotar quebra o vínculo entre a instância e o asset: o objeto vira GameObject comum. Clique com o botão direito na instância na Hierarchy e vá em Prefab:
- Unpack: desfaz o vínculo só da instância selecionada. Prefabs aninhados dentro dela continuam sendo prefabs.
- Unpack Completely: desfaz o vínculo dela e de todos os prefabs aninhados, até o último filho.
Quando faz sentido:
- Você usou um prefab de outra pessoa (um pacote da Asset Store, por exemplo) como ponto de partida e vai transformá-lo em algo próprio que não deve mais receber atualização do original.
- Um objeto único da fase, como um cenário montado à mão, foi criado a partir de um prefab e nunca vai se repetir.
Quando não faz: para "resolver" override que não propaga. Desempacotar só piora, porque aí nenhuma mudança futura chega mais. E cuidado com o Unpack Completely numa cena cheia: ele é desfeito com Ctrl+Z, mas se você salvar e fechar, recriar os vínculos é trabalho manual.
Erros comuns: mudança que não propaga e referência perdida
Mudei o prefab e uma cópia não mudou. Aquela cópia tem override no campo. Selecione, veja o negrito, e use Revert no campo ou Revert All no dropdown Overrides.
Mudei uma cópia e as outras não mudaram. Você editou a instância, não o prefab. Use Overrides > Apply All naquela instância, ou edite no Prefab Mode da próxima vez.
O campo que aponta para o Player está vazio nas cópias novas. Prefab não guarda referência para objeto da cena. Busque a referência em tempo de execução (por exemplo com FindFirstObjectByType<Player>() no Start, ou injetando a referência quando quem cria o objeto conhece o Player).
Nome vermelho na Hierarchy (Missing Prefab). O asset de origem sumiu, quase sempre porque alguém apagou ou moveu o arquivo pelo Explorer do Windows, sem o .meta. Mova e renomeie assets sempre pela janela Project da Unity, que leva o .meta junto. Para recuperar, restaure o arquivo pelo Git.
Pasta apagada leva o prefab junto. Prefab é arquivo: se você apaga a pasta, as instâncias ficam Missing. Mantenha os prefabs numa pasta própria e versionada.
Próximo passo
Escolha o objeto que mais se repete no seu jogo (moeda, inimigo, plataforma) e faça três coisas: transforme em prefab, coloque dez cópias na cena e mude uma propriedade só pelo Prefab Mode, conferindo que todas mudaram. Depois provoque um override de propósito e desfaça com Revert. Com isso dominado, o passo seguinte é fazer famílias de objetos a partir de um molde comum com Prefab Variant. Se você ainda está planejando o primeiro projeto inteiro, o guia de como fazer um jogo do zero ajuda a definir quais objetos merecem virar prefab desde o começo.
Perguntas frequentes
O que é prefab na Unity?
Prefab é um GameObject salvo como asset, com seus componentes, filhos e valores, que funciona como molde. Cada cópia colocada na cena é uma instância ligada ao molde: quando você edita o prefab, todas as instâncias recebem a mudança, exceto nos campos que elas sobrescreveram.
Como editar um prefab sem afetar só uma cópia?
Abra o prefab no Prefab Mode (duplo clique no asset na janela Project ou botão Open no Inspector) e edite lá. Se você já mexeu numa instância da cena, use o menu Overrides do Inspector e escolha Apply All para levar a mudança ao prefab.
Qual a diferença entre Unpack e Unpack Completely?
Unpack desfaz o vínculo só da instância selecionada e mantém os prefabs aninhados dentro dela como prefabs. Unpack Completely desfaz o vínculo da instância e de todos os prefabs aninhados, deixando GameObjects comuns.
Por que o nome do objeto na Hierarchy ficou vermelho?
Nome vermelho indica Missing Prefab: a instância perdeu o asset de origem, geralmente porque o arquivo foi apagado ou o .meta se perdeu fora da Unity. Restaure o arquivo pelo Git ou desfaça o vínculo e recrie o prefab.


