Valorizziamo la tua privacy. Usiamo i cookie per migliorare la tua esperienza sul nostro sito. Utilizzando questo sito accetti la nostra Informativa sulla privacy.

Istanze dei Prefab in 1.2.0

Istanze dei Prefab in 1.2.0

L’istanza di prefab è il processo di creazione di oggetti e componenti da un file .bin/.glb.

Poiché il nuovo metodo di istanziazione si basa sul concetto di multiscene, ti consigliamo di dare un’occhiata veloce al nostro post del blog sul multiscene prima di procedere.

Prima della versione 1.2.0 

L’istanza di un “prefab” era disponibile tramite il metodo append (ora deprecato):

1const promises = [];
2for (let i = 0; i < 100; ++i) {
3    promises.push(await engine.scene.append('Zombie.bin'));
4}
5await Promise.all(promises);

Questa API presenta delle limitazioni:

  • La scena deve essere scaricata e analizzata 100 volte
  • Ogni Zombie.bin crea nuovi mesh, texture e materiali

Vediamo come Wonderland Engine 1.2.0 aiuta a risolvere questi problemi!

Istanza 

Qualsiasi scena caricata tramite loadScene può essere destinataria di un’istanza:

1const mainScene = await engine.loadMainScene('Scene.bin');
2const zombie = await engine.loadPrefab('Zombie.bin');
3
4// Crea un'orda di zombie
5for (let i = 0; i < 100; ++i) {
6    const {root} = mainScene.instantiate(zombie);
7}

Poiché il risultato è un’istanza Object3D, puoi modificare la gerarchia come segue:

1const {root} = mainScene.instantiate(zombie);
2// `root` è il genitore Object3D dell'intero grafo di scena `Zombie.bin`
3root.setScalingLocal([0.5, 0.5, 0.5]);

Puoi chiamare instantiate() su scene attive e inattive. Sebbene l’esempio sopra dimostri come utilizzarlo su una scena attiva, l’istanza in una scena inattiva funziona allo stesso modo:

1const zombie = await engine.loadPrefab('Zombie.bin');
2const zombieHead = zombie.findByName('Head')[0];
3zombieHead.addComponent(LookAtComponent);
4
5const nextScene = engine.load('NextScene.bin');
6
7// Solo una volta istanziato, LookAtComponent.onActivate()
8// e LookAtComponent.start() vengono invocati.
9nextScene.instantiate(zombie);

GLTF 

L’istanza non è limitata al formato di scena Wonderland Engine (.bin), ma può essere utilizzata anche con glTF:

1const avocado = await engine.loadGLTF('Avocado.glb');
2
3// Fai un'insalata di avocado
4for (let i = 0; i < 100; ++i) {
5    const {root} = scene.instantiate(avocado);
6}

I prefab glTF hanno anche metodi extra per gestire le estensioni. Per ulteriori informazioni, dai un’occhiata all’API PrefabGLTF.

Nota sulle Risorse 

Come menzionato nel post del blog sul multiscene, le risorse vengono spostate nell’istanza engine quando vengono caricate. Questo permette a più scene di fare riferimento alle stesse risorse, senza duplicare la memoria.

I componenti creati tramite instanziazione quindi:

  • Fanno riferimento alle stesse risorse
  • Eliminare una risorsa farà sì che l’istanza faccia riferimento a un’entrata nulla

Ulteriori Approfondimenti 

Ecco alcuni link per aiutarti a iniziare a utilizzare le istanze nei tuoi progetti:

Non vediamo l’ora di vedere come la comunità sfrutterà le istanze per creare esperienze straordinarie!

Last Update: June 13, 2025

Resta aggiornato.