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