For the complete documentation index, see llms.txt. This page is also available as Markdown.

Compositos

Gere uma árvore de entities e components em runtime a partir de um arquivo composite

Um composite é um arquivo que descreve uma árvore de entities e components. Em vez de escrever código para criar cada entity individualmente, você pode armazenar essa estrutura em um arquivo composite e instanciar tudo com uma única chamada.

Talvez você já trabalhe com composites sem perceber:

  • Toda scene tem um main.composite arquivo. Ele contém tudo o que você adicionou e configurou visualmente no Scene Editor. Esse arquivo é carregado automaticamente quando sua scene começa.

  • Custom Items são salvos como composite.json arquivos. Cada Custom Item é um composite que você pode reutilizar entre scenes.

Esta página aborda como instanciar um composite a partir de código em runtime, por exemplo, para instanciar um Custom Item dinamicamente como parte da lógica da sua cena.

Instanciar um composite

Instanciar um composite requer dois passos: carregar o arquivo composite, depois instanciar ele. O carregamento é assíncrono e a instanciação é síncrona, então o padrão é sempre carregar e depois instanciar:

export async function spawnBarrel() {
  const src = "barrel.composite";

  // 1. Carregue o composite a partir do seu arquivo
  await engine.getCompositeProvider().loadComposite(src);

  // 2. Instancie-o: cria todas as suas entities e components
  const barrel = engine.addEntityFromComposite(src);
  return barrel;
}

engine.getCompositeProvider().loadComposite(src) lê o arquivo composite e o carrega na memória. Em uma scene normal construída com @dcl/sdk, um composite provider já está configurado para você, você o acessa com engine.getCompositeProvider().

engine.addEntityFromComposite(src) então cria todas as entities descritas no composite, com todos os seus components, e retorna a root entity da árvore instanciada. Use essa entity retornada para ler ou alterar components mais tarde, por exemplo, para reposicionar ou remover o item instanciado.

💡 Dica: Para fazer a mesma coisa sem escrever código, use a Spawn Entity action no Scene Editor. Veja Sobre instanciar entities.

Posicione um composite instanciado

Passe uma opção transform para addEntityFromComposite() para colocar o composite instanciado em uma posição, rotação ou escala específica. Esse transform é aplicado à root entity.

Os campos de transform (position, rotation, e scale) são todos opcionais. Qualquer campo que você omitir mantém o valor armazenado no composite.

Limitação atual: composites aninhados

A instanciação funciona para composites autônomos e Custom Items. Um composite pode referenciar outro composite a partir de uma de suas entities, mas o carregamento não faz recursão nessas referências aninhadas ainda.

Se a root de um composite instanciado referenciar outro composite (qualquer coisa além de main.composite, o único composite incluído na sua cena), ele falha ao instanciar. Por enquanto, mantenha os composites que você instancia autônomos.

Páginas relacionadas

Atualizado