1.2.0でのPrefabインスタンシング
Prefabインスタンス化は、.bin
/.glb
ファイルからオブジェクトやコンポーネントを作成するプロセスです。
新しいインスタンス化メソッドはマルチシーンの概念に基づいているため、まずは私たちの マルチシーンに関するブログ記事を一読することをお勧めします。
バージョン1.2.0以前
“prefab"のインスタンス化は、(現在は非推奨の)append メソッドを介して利用可能でした。
このAPIには以下のような制限があります:
- シーンをダウンロードし、100回解析する必要があります
- 各
Zombie.bin
は新しいメッシュ、テクスチャ、マテリアルを生成します
では、Wonderland Engine 1.2.0がこれらの問題をどのように解決するかを見てみましょう!
インスタンス化
loadScene を介してロードされた任意のシーンは、インスタンス化の受け手となれます:
結果がObject3D インスタンスであるため、次のように階層を変更できます:
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でも使用可能です:
GlTF prefabには、拡張機能を管理するための追加メソッドもあります。詳細についてはPrefabGLTF APIを参照してください。
リソースについての注意
マルチシーンに関するブログ記事で述べたように、ロード時にリソースはengine インスタンスに移動されます。これにより、複数のシーンが同一のリソースを参照でき、メモリの重複を回避します。
instantiationで作成されたコンポーネントは次のようになります:
- 同一のリソースを参照
- リソースを削除すると、インスタンスはnullエントリを参照する
さらに進む
プロジェクトでのインスタンス化の使用を開始するためのリンクをいくつか紹介します:
- Prefabインスタンス化GitHub例
- Scene.instantiate JavaScript API
コミュニティがインスタンス化を活用して素晴らしい体験を構築していくのを楽しみにしています!