ソースを参照

Merge pull request #4087 from bghgary/animation-fix

Move code that adds animation to target into glTF loader
David Catuhe 7 年 前
コミット
3f93e71779

+ 7 - 1
loaders/src/glTF/2.0/babylon.glTFLoader.ts

@@ -922,7 +922,9 @@ module BABYLON.GLTF2 {
 
                         const morphTargets = new Array<any>();
                         this._forEachPrimitive(targetNode, babylonMesh => {
-                            morphTargets.push(babylonMesh.morphTargetManager!.getTarget(targetIndex));
+                            const morphTarget = babylonMesh.morphTargetManager!.getTarget(targetIndex);
+                            morphTarget.animations.push(babylonAnimation);
+                            morphTargets.push(morphTarget);
                         });
 
                         babylonAnimationGroup.addTargetedAnimation(babylonAnimation, morphTargets);
@@ -934,6 +936,10 @@ module BABYLON.GLTF2 {
                     babylonAnimation.setKeys(keys);
 
                     if (targetNode._babylonAnimationTargets) {
+                        for (const babylonAnimationTarget of targetNode._babylonAnimationTargets) {
+                            babylonAnimationTarget.animations.push(babylonAnimation);
+                        }
+
                         babylonAnimationGroup.addTargetedAnimation(babylonAnimation, targetNode._babylonAnimationTargets);
                     }
                 }

+ 1 - 9
src/Animations/babylon.animationGroup.ts

@@ -153,15 +153,7 @@ module BABYLON {
                 return this;
             }
 
-            for (var index = 0; index < this._targetedAnimations.length; index++) {
-                let targetedAnimation = this._targetedAnimations[index];
-                if (!targetedAnimation.target.animations) {
-                    targetedAnimation.target.animations = [];
-                }
-                if (targetedAnimation.target.animations.indexOf(targetedAnimation.animation) === -1) {
-                    targetedAnimation.target.animations.push(targetedAnimation.animation);
-                }
-                
+            for (const targetedAnimation of this._targetedAnimations) {
                 this._animatables.push(this._scene.beginDirectAnimation(targetedAnimation.target, [targetedAnimation.animation], from !== undefined ? from : this._from, to !== undefined ? to : this._to, loop, speedRatio, () => {
                     this.onAnimationEndObservable.notifyObservers(targetedAnimation);
                 }));