Instanciando cenas
Depois de ter uma cena (arquivo .prefab), você pode instanciá-la em outras cenas. Uma instância é uma cópia vinculada: as alterações na cena de origem se propagam para todas as instâncias, exceto pelas propriedades que a instância sobrescreveu deliberadamente.
Terminologia
- Origem (Source) — o arquivo
.prefabem disco que define a árvore de objetos. - Instância (Instance) — uma cópia vinculada dessa árvore dentro de uma cena aberta.
- Sobrescrita (Override) — uma propriedade alterada em uma instância específica, que é preservada quando a origem é atualizada.
Instanciando em tempo de edição
No Asset Browser, localize uma cena ou prefab. Há duas formas de instanciar:
- Arraste-o do Asset Browser para a Scene Viewport ou para o painel Scene Hierarchy.
- Clique com o botão direito nele e escolha Instantiate into Scene.
Uma nova instância aparece sob a raiz da cena com um destaque azul e um ícone de caixa em seu nó raiz — a forma do editor mostrar que se trata de uma cópia vinculada.
Criando um prefab a partir de um objeto de cena
Para transformar qualquer nó em sua cena em um prefab reutilizável:
- Clique com o botão direito no nó no Scene Hierarchy.
- Escolha Create Prefab.
- Um asset
.prefabé gravado na pasta atual do Asset Browser e o objeto torna-se a primeira instância desse prefab.
Você também pode arrastar um nó do Scene Hierarchy e soltá-lo no Asset Browser.
Editando um prefab
Dê um duplo clique em um .prefab no Asset Browser para abri-lo para edição. O Scene Hierarchy mostrará a árvore do prefab. Faça suas alterações e salve — na próxima vez que uma cena contendo uma instância for carregada, a instância refletirá suas edições (preservando quaisquer sobrescritas).
Sobrescritas (Overrides)
Depois que um prefab é instanciado, você pode ajustar qualquer propriedade na instância — nome, transform, campos de componentes. Cada propriedade alterada é gravada como uma sobrescrita (override) e listada no banner Prefab Instance na parte superior do painel Inspector.
O banner possui duas ações:
- Revert — descarta todas as sobrescritas nesta instância e a retorna ao estado do prefab de origem.
- Apply — envia os valores atuais da instância de volta para o prefab de origem, propagando-os para todas as outras instâncias (cada uma mantendo suas próprias sobrescritas).
Spawning em tempo de execução
O código de gameplay spawna e destrói instâncias vinculadas através do contexto Frame:
const engine = @import("engine");
pub const Spawner = struct {
pub const is_component = true;
prefab: engine.TypedAssetRef(.scene) = .{},
pub fn update(self: *@This(), frame: engine.Frame) void {
if (frame.input.wasPressed("fire")) {
frame.instantiate(self.prefab.slice(), .{ .x = 0, .y = 1, .z = 0 }, null);
}
}
};
frame.instantiate(guid, position, rotation)enfileira uma nova instância vinculada do prefab.positionerotationsão sobrescritas opcionais para o transform da raiz.frame.destroy(node)enfileira a remoção de um nó e de seus descendentes.
Ambos são postergados: eles são aplicados após a atualização do frame atual, para que um script possa spawnar ou destruir objetos enquanto itera sobre os objetos da cena, sem causar bugs de iteração.
Desempenho e fluxo de trabalho
A instanciação não é uma otimização de desempenho — é uma otimização de fluxo de trabalho. Você cria um único prefab de inimigo e distribui cinquenta instâncias pelo nível. Mais tarde, ajuste o mesh ou a vida do prefab e todos os cinquenta serão atualizados. O custo de runtime de uma instância é o mesmo que o de um objeto posicionado manualmente.