diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs b/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs
index 96ce3084d..fb373bd69 100644
--- a/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs
+++ b/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs
@@ -38,7 +38,6 @@ using System.Collections.Generic;
namespace Spine.Unity {
public static class SpineMesh {
-
internal const HideFlags MeshHideflags = HideFlags.DontSaveInBuild | HideFlags.DontSaveInEditor;
/// Factory method for creating a new mesh for use in Spine components. This can be called in field initializers.
@@ -132,6 +131,8 @@ namespace Spine.Unity {
[NonSerialized] ExposedList uv3;
#endregion
+ public int VertexCount { get { return vertexBuffer.Count; } }
+
#region Step 1 : Generate Instructions
public static void GenerateSingleSubmeshInstruction (SkeletonRendererInstruction instructionOutput, Skeleton skeleton, Material material) {
ExposedList drawOrder = skeleton.drawOrder;
@@ -295,7 +296,7 @@ namespace Spine.Unity {
}
if (noRender) {
- if (current.forceSeparate && current.rawVertexCount > 0 && generateMeshOverride) {
+ if (current.forceSeparate && generateMeshOverride && current.rawVertexCount > 0) {
{ // Add
current.endSlot = i;
current.preActiveClippingSlotSource = lastPreActiveClipping;
@@ -305,6 +306,7 @@ namespace Spine.Unity {
submeshIndex++;
}
+
current.startSlot = i;
lastPreActiveClipping = clippingAttachmentSource;
#if SPINE_TRIANGLECHECK
@@ -327,7 +329,7 @@ namespace Spine.Unity {
Material material = (rendererObject.GetType() == typeof(Material)) ? (Material)rendererObject : (Material)((AtlasRegion)rendererObject).page.rendererObject;
#endif
- if (current.rawVertexCount > 0 && (current.forceSeparate || !System.Object.ReferenceEquals(current.material, material))) { // Material changed. Add the previous submesh.
+ if (current.forceSeparate || (current.rawVertexCount > 0 && !System.Object.ReferenceEquals(current.material, material))) { // Material changed. Add the previous submesh.
{ // Add
current.endSlot = i;
current.preActiveClippingSlotSource = lastPreActiveClipping;
diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonPartsRenderer.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonPartsRenderer.cs
index 4f52f0e42..e89f2c5c1 100644
--- a/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonPartsRenderer.cs
+++ b/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonPartsRenderer.cs
@@ -104,12 +104,18 @@ namespace Spine.Unity.Modules {
// STEP 3: modify mesh.
var mesh = smartMesh.mesh;
- meshGenerator.FillVertexData(mesh);
- if (updateTriangles) {
- meshGenerator.FillTriangles(mesh);
- meshRenderer.sharedMaterials = buffers.GetUpdatedShaderdMaterialsArray();
- } else if (buffers.MaterialsChangedInLastUpdate()) {
- meshRenderer.sharedMaterials = buffers.GetUpdatedShaderdMaterialsArray();
+
+ if (meshGenerator.VertexCount <= 0) { // Clear an empty mesh
+ updateTriangles = false;
+ mesh.Clear();
+ } else {
+ meshGenerator.FillVertexData(mesh);
+ if (updateTriangles) {
+ meshGenerator.FillTriangles(mesh);
+ meshRenderer.sharedMaterials = buffers.GetUpdatedShaderdMaterialsArray();
+ } else if (buffers.MaterialsChangedInLastUpdate()) {
+ meshRenderer.sharedMaterials = buffers.GetUpdatedShaderdMaterialsArray();
+ }
}
meshFilter.sharedMesh = mesh;