Selaa lähdekoodia

Fix morph targets export when a target is removed but its channel is not deleted

noalak 7 vuotta sitten
vanhempi
commit
8563effd1c
1 muutettua tiedostoa jossa 25 lisäystä ja 20 poistoa
  1. 25 20
      Exporters/3ds Max/Max2Babylon/Exporter/BabylonExporter.Mesh.cs

+ 25 - 20
Exporters/3ds Max/Max2Babylon/Exporter/BabylonExporter.Mesh.cs

@@ -403,27 +403,32 @@ namespace Max2Babylon
                         {
                         {
                             // Morph target
                             // Morph target
                             var maxMorphTarget = morpher.GetMorphTarget(i);
                             var maxMorphTarget = morpher.GetMorphTarget(i);
-                            var babylonMorphTarget = new BabylonMorphTarget
-                            {
-                                name = maxMorphTarget.Name
-                            };
-                            babylonMorphTargets.Add(babylonMorphTarget);
-
-                            // TODO - Influence
-                            babylonMorphTarget.influence = 0f;
-
-                            // Target geometry
-                            var targetVertices = ExtractVertices(maxMorphTarget, optimizeVertices);
-                            babylonMorphTarget.positions = targetVertices.SelectMany(v => new[] { v.Position.X, v.Position.Y, v.Position.Z }).ToArray();
-                            babylonMorphTarget.normals = targetVertices.SelectMany(v => new[] { v.Normal.X, v.Normal.Y, v.Normal.Z }).ToArray();
-
-                            // Animations
-                            var animations = new List<BabylonAnimation>();
-                            var morphWeight = morpher.GetMorphWeight(i);
-                            ExportFloatGameController(morphWeight, "influence", animations);
-                            if (animations.Count > 0)
+
+                            // Ensure target still exists (green color legend)
+                            if (maxMorphTarget != null)
                             {
                             {
-                                babylonMorphTarget.animations = animations.ToArray();
+                                var babylonMorphTarget = new BabylonMorphTarget
+                                {
+                                    name = maxMorphTarget.Name
+                                };
+                                babylonMorphTargets.Add(babylonMorphTarget);
+
+                                // TODO - Influence
+                                babylonMorphTarget.influence = 0f;
+
+                                // Target geometry
+                                var targetVertices = ExtractVertices(maxMorphTarget, optimizeVertices);
+                                babylonMorphTarget.positions = targetVertices.SelectMany(v => new[] { v.Position.X, v.Position.Y, v.Position.Z }).ToArray();
+                                babylonMorphTarget.normals = targetVertices.SelectMany(v => new[] { v.Normal.X, v.Normal.Y, v.Normal.Z }).ToArray();
+                                
+                                // Animations
+                                var animations = new List<BabylonAnimation>();
+                                var morphWeight = morpher.GetMorphWeight(i);
+                                ExportFloatGameController(morphWeight, "influence", animations);
+                                if (animations.Count > 0)
+                                {
+                                    babylonMorphTarget.animations = animations.ToArray();
+                                }
                             }
                             }
                         }
                         }
                     });
                     });