私は babylonjs を試してきましたが、これまでのところすべてが素晴らしいです。すべてが同じファイル内の ImportMesh コールバック関数にある場合、メッシュを読み込んでアニメーション化することができます。でも; 物事を分割して以下のような単純なことをしようとすると、これらの競合状態が発生するようです。次の例を見てください。
var models = ["brick_wall", "tree1", "person1"]
for (var i =0;i<models.length;++i) {
BABYLON.SceneLoader.ImportMesh(models[i], "models/","tree.babylon", scene, (newMeshes) => {
this.meshMap[models[i]] = newMeshes[0]
console.log("mesh set:" + models[i])
});
}
コンソール ログは「メッシュ セット: 未定義」として出力されます。「i」が設定される前に、インポートメッシュが独自のスレッドでコールバック関数を実行するためだと思いますか? ただし、コールバック内でコンソール印刷を行うだけで「i」やモデルリストが設定されない方法について、頭を悩ませています。コンソール印刷を行うと:
models[1]
同じコールバック内で、値を正しく見ることができますか? 意味がありません :(
スレッド化に関してインポートメッシュで何が起こっているか知っている人はいますか? スレッドを待っているbabylonjsのベストプラクティスはありますか? scene.executewhenready を使用してみましたが、コールバックの外部の変数に何かを保存および取得できないようです。