2017-05-12 4 views
0

Ich mache Kopien von einem 3D JSON-Modell, das ich animiert habe, und es funktioniert, wenn ich nur 1 Modell in der Szene habe.Threejs Cloning Meshes Animation

Aber wenn ich versuche, einige Kopien zu machen, erscheint es den folgenden Fehler:

Uncaught Typeerror: kann nicht lesen Eigenschaft ‚0‘ von undefiniert.

Die folgende Funktion ist, wo der Fehler verweist:

for(i =0; i < enemics_generats; i++){ 

    var enemic = dolent.clone(true); //Clone from original model 
    enemic.name = i.toString(); 
    if (i > 5){//set 5 visible, the rest invisble 
     enemic.visible = false; 
    } 
    else{ 
     enemic.visible = true; 
    } 

    enemic.box = new THREE.Box3().setFromObject(enemic);//Box collider 
    enemic.box_helper = new THREE.BoxHelper(enemic); //Box to be displayed on the scene 

    //ERROR IS ON THIS 2 FOLLOWING LANES 

    enemic.mixer = new THREE.AnimationMixer(enemic); 
    enemic.mixer.clipAction(enemic.animations[ 0 ]).play(); //HERE IS WHERE THE ERROR APPEARS 

    enemics.push(enemic);//Add to the array 

    scene.add(enemic);//Add to scene 
    scene.add(enemic.box_helper); 
} 

Vielen Dank für Ihre Zeit.

+0

Wo Ihre Animationen Eigenschaft oder Funktion definiert ist. –

+0

Der JSON-Loader liest die Animationen aus der Datei und speichert sie in der Animationseigenschaft. –

+0

Also, "dolent" (das ist das ursprüngliche geladene Modell), hat die Animation im Inneren. –

Antwort

0

Object3D.clone kopiert nicht Ihre Animationen Array. Es werden nur Eigenschaften kopiert, die für das Objekt THREE.js relevant sind. Sie müssen Ihr Animationsarray in Ihrem geklonten Objekt manuell kopieren (oder darauf verweisen).

var obj1 = new THREE.Object3D(); 
 
obj1.someProperty = "test"; 
 
var obj2 = obj1.clone(); 
 
console.log(obj2.someProperty); // undefined
<script src="https://threejs.org/build/three.js"></script>

+0

Gut zu wissen, ich werde einen Verweis auf die ursprüngliche Animation machen. Danke –