diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs index 0114cbbb5..26d56d348 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs @@ -51,6 +51,7 @@ namespace Spine.Unity.Modules { SerializedProperty separatorNamesProp; static bool skeletonRendererExpanded = true; bool slotsReapplyRequired = false; + bool partsRendererInitRequired = false; void OnEnable () { if (component == null) @@ -78,6 +79,14 @@ namespace Spine.Unity.Modules { } public override void OnInspectorGUI () { + + // Restore mesh part for undo logic after undo of "Add Parts Renderer". + // Triggers regeneration and assignment of the mesh filter's mesh. + if (component.GetComponent() && component.GetComponent().sharedMesh == null) { + component.OnDisable(); + component.OnEnable(); + } + var componentRenderers = component.partsRenderers; int totalParts; @@ -177,6 +186,7 @@ namespace Spine.Unity.Modules { if (GUILayout.Button(addMissingLabel, GUILayout.Height(40f))) { AddPartsRenderer(extraRenderersNeeded); DetectOrphanedPartsRenderers(component); + partsRendererInitRequired = true; } } } @@ -202,14 +212,22 @@ namespace Spine.Unity.Modules { } // (Button) Add Part Renderer button - if (GUILayout.Button("Add Parts Renderer")) - AddPartsRenderer(1); + if (GUILayout.Button("Add Parts Renderer")) { + AddPartsRenderer(1); + partsRendererInitRequired = true; + } } } } serializedObject.ApplyModifiedProperties(); + if (partsRendererInitRequired) { + Undo.RegisterCompleteObjectUndo(component.GetComponent(), "Add Parts Renderers"); + component.OnEnable(); + partsRendererInitRequired = false; + } + if (slotsReapplyRequired && UnityEngine.Event.current.type == EventType.Repaint) { component.SkeletonRenderer.ReapplySeparatorSlotNames(); component.SkeletonRenderer.LateUpdate(); diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.cs index 1c700c0ba..43bbce484 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.cs @@ -151,7 +151,7 @@ namespace Spine.Unity.Modules { } #endregion - void OnEnable () { + public void OnEnable () { if (skeletonRenderer == null) return; if (copiedBlock == null) copiedBlock = new MaterialPropertyBlock(); mainMeshRenderer = skeletonRenderer.GetComponent(); @@ -184,7 +184,7 @@ namespace Spine.Unity.Modules { } } - void OnDisable () { + public void OnDisable () { if (skeletonRenderer == null) return; #if SPINE_OPTIONAL_RENDEROVERRIDE skeletonRenderer.GenerateMeshOverride -= HandleRender;