Instanciando cenas

Esta página foi traduzida automaticamente e pode conter erros. Encontrou um problema? Use o link "Edit this page" para ajudar a corrigir.

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 .prefab em 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:

  1. Clique com o botão direito no nó no Scene Hierarchy.
  2. Escolha Create Prefab.
  3. 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. position e rotation sã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.


← Toda a documentação Editar esta página