クッキー設定を管理します。以下で異なるタイプのクッキーを有効または無効にできます。詳細については、プライバシーポリシーをご覧ください。

1.2.0でのPrefabインスタンシング

Prefabインスタンス化は、.bin/.glbファイルからオブジェクトやコンポーネントを作成するプロセスです。

新しいインスタンス化メソッドはマルチシーンの概念に基づいているため、まずは私たちの マルチシーンに関するブログ記事を一読することをお勧めします。

バージョン1.2.0以前 

“prefab"のインスタンス化は、(現在は非推奨の)append メソッドを介して利用可能でした。

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

このAPIには以下のような制限があります:

  • シーンをダウンロードし、100回解析する必要があります
  • Zombie.binは新しいメッシュテクスチャマテリアルを生成します

では、Wonderland Engine 1.2.0がこれらの問題をどのように解決するかを見てみましょう!

インスタンス化 

loadScene を介してロードされた任意のシーンは、インスタンス化の受け手となれます:

1const mainScene = await engine.loadMainScene('Scene.bin');
2const zombie = await engine.loadPrefab('Zombie.bin');
3
4// ゾンビの群れを作成
5for (let i = 0; i < 100; ++i) {
6    const {root} = mainScene.instantiate(zombie);
7}

結果がObject3D インスタンスであるため、次のように階層を変更できます:

1const {root} = mainScene.instantiate(zombie);
2// `root`は`Zombie.bin`シーングラフ全体のObject3D親です
3root.setScalingLocal([0.5, 0.5, 0.5]);

instantiate()アクティブシーンと非アクティブシーンの両方で呼び出すことができます。上記の例ではアクティブシーンでの使用例を示していますが、非アクティブシーンでのインスタンス化も同様に機能します:

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// 一度インスタンス化されると、LookAtComponent.onActivate()
8// およびLookAtComponent.start()が呼び出されます。
9nextScene.instantiate(zombie);

GLTF 

インスタンス化はWonderland Engineシーン形式(.bin)に限定されるものではなく、glTFでも使用可能です:

1const avocado = await engine.loadGLTF('Avocado.glb');
2
3// アボカドサラダを作る
4for (let i = 0; i < 100; ++i) {
5    const {root} = scene.instantiate(avocado);
6}

GlTF prefabには、拡張機能を管理するための追加メソッドもあります。詳細についてはPrefabGLTF APIを参照してください。

リソースについての注意 

マルチシーンに関するブログ記事で述べたように、ロード時にリソースはengine インスタンスに移動されます。これにより、複数のシーンが同一のリソースを参照でき、メモリの重複を回避します。

instantiationで作成されたコンポーネントは次のようになります:

  • 同一のリソースを参照
  • リソースを削除すると、インスタンスはnullエントリを参照する

さらに進む 

プロジェクトでのインスタンス化の使用を開始するためのリンクをいくつか紹介します:

コミュニティがインスタンス化を活用して素晴らしい体験を構築していくのを楽しみにしています!

Last Update: March 28, 2025

最新情報をお届けします。