2017-11-09 5 views
0

私はこのThree.js - object3D.childrenの機能にどのようにアクセスできますか?

myObject3D.children.forEach( 
    function(pChild){ 
     return pChild.position.multiplyScalar(myMultiplier) 
    } 
); 

この

myObject3D.children.forEach( 
    function(pChild){ 
     pChild.position.copy(myVector3) 
    } 
); 

のような行を使用しようとしている。しかし、いくつかの理由から、「myObject3D」の子要素の関数はinexistentのようです。 ("Uncaught TypeError: pChild.position.multiplyScalar is not a function"

ただし、 'myObject3D'の要素は 'Mesh'オブジェクトです。

私は何をすることができますか?

おかげ

答えて

0

まず、あなたのforEachコールバックは何を返すべきではありません。

2番目のコードセグメントに問題はないようです。

以下のコードはエラーなしで実行されます。

var group = new THREE.Object3D(); 
 
var geo = new THREE.BoxBufferGeometry(10, 10, 10); 
 
var mat = new THREE.MeshBasicMaterial({ 
 
    color: "red" 
 
}); 
 
var mesh = new THREE.Mesh(geo, mat); 
 

 
group.add(mesh); 
 
group.add(mesh.clone()); 
 
group.add(mesh.clone()); 
 
group.add(mesh.clone()); 
 
group.add(mesh.clone()); 
 

 
var myVector3 = new THREE.Vector3(); 
 

 
group.children.forEach(function(pChild) { 
 
    pChild.position.multiplyScalar(5); 
 
    pChild.position.copy(myVector3) 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.js"></script>

使用すると、オブジェクトの正しい種類を使用してグループを移入していることを確認してください。また、使用する前に関数が使用可能かどうかを常にテストすることができます。

if(obj.someFunction){ 
    obj.someFunction(); 
} 
+0

ありがとうございました!最後に、問題は私自身のグループでした。 "myObject3D"は配列に格納されていましたが、私はそれを修正しました:) –

関連する問題