Instanciando cenas
Toda cena também é um prefab: um arquivo .prefab é uma árvore de nós que você pode abrir e editar sozinha, e carimbar em outra cena quantas vezes quiser. Crie um inimigo, um item ou uma sala uma vez e faça surgir onde o jogo precisar.
Referenciando um prefab
Dê ao seu componente um campo do tipo AssetReference<Prefab>, ou PrefabReference<T> quando quiser um componente específico da cópia criada:
namespace Usercode;
public class Spawner : Component
{
public AssetReference<Prefab>? Enemy;
public PrefabReference<LightComponent>? Lamp;
}
No Inspector, arraste o arquivo .prefab do painel Assets para o campo.
Criando cópias em tempo de execução
A instanciação passa pelo gerenciador de cenas, que os scripts obtêm de RuntimeServices:
public class Spawner : Component
{
public AssetReference<Prefab>? Enemy;
public PrefabReference<LightComponent>? Lamp;
ISceneManager? scenes;
public override void OnAwake() => scenes = RuntimeServices.TryGet<ISceneManager>();
public override async void OnStart()
{
if (scenes is null || Enemy is null || Lamp is null) return;
// Adiciona uma cópia sob este nó; passe null para adicioná-la à raiz da cena ativa.
var enemy = await scenes.InstantiateAsync(Enemy, Node);
enemy.Transform.Position = new Vector3(2, 0, 0);
// Retorna o LightComponent encontrado na cópia.
var lamp = await Lamp.InstantiateAsync(scenes);
lamp.Intensity = 3f;
}
}
InstantiateAsync(referência, pai)carrega o prefab, faz uma cópia e a anexa sobpai, ou sob a raiz da cena ativa quandopaiénull.PrefabReference<T>.InstantiateAsync(scenes)faz o mesmo e retorna o componenteTda cópia.InstantiateAsync(componente)clona a hierarquia que contém um componente já presente na cena.
Cada cópia é independente: depois de criada, alterá-la não afeta o prefab nem as outras cópias.
Editando um prefab
Clique duas vezes no .prefab no painel Assets para abri-lo em sua própria aba, altere e salve. Toda cópia criada depois reflete a mudança. Para mover nós entre cenas abertas, use Copy e Paste na Scene Tree.
Ainda não disponível
Instâncias de prefab vinculadas colocadas no editor, sobrescritas por instância e propagação de prefabs aninhados não fazem parte do Turian 1.0. Hoje, a instanciação é uma cópia feita em tempo de execução.