3

Three.js で OBJLoader を使用してロードされたオブジェクトを操作 (位置、スケール、回転などの変更) しようとしています。これは一度行うと簡単ですが、アニメーション ループ中や初期ロード コールバック以外の場所など、必要なときにこれを行う方法がわかりません。

これが私のコードです:

function loadObj( path, name )
{
    var obj;
    var mtlLoader = new THREE.MTLLoader();
    mtlLoader.setPath( path );
    mtlLoader.load( name+".mtl", function( materials ) {
        materials.preload();

        var objLoader = new THREE.OBJLoader();
        objLoader.setMaterials( materials );
        objLoader.setPath( path );
        objLoader.load( name+".obj", function( object ) {
            obj = object;
            obj.position.x = 20;
            scene.add( obj );
        });
    });
    return obj;
}

var myObj = loadObj( "assets/", "test" );

myObj.position.y = 20;

ここで注意すべき重要な点は次のとおりです。

  • ループ内でロードして操作できますが、エラーは発生しません。
  • 上記を実行すると、最後の行に次のようなエラーが表示されますCannot read property 'position' of undefined
  • このエラーはobj、関数の外部で (グローバルとして) 定義し、それに応じて参照すると残ります。

JSONローダーで同様のコードを試してみましたが、同じ結果になりました(ロード内で操作できますが、後で操作することはできません)。

4

1 に答える 1