Эх сурвалжийг харах

[unity] SkeletonRenderSeparator now initializes added SkeletonPartsRenderer children correctly. Closes #1269.

Harald Csaszar 6 жил өмнө
parent
commit
7ee15d0627

+ 20 - 2
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<MeshFilter>() && component.GetComponent<MeshFilter>().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<MeshRenderer>(), "Add Parts Renderers");
+				component.OnEnable();
+				partsRendererInitRequired = false;
+			}
+
 			if (slotsReapplyRequired && UnityEngine.Event.current.type == EventType.Repaint) {
 				component.SkeletonRenderer.ReapplySeparatorSlotNames();
 				component.SkeletonRenderer.LateUpdate();

+ 2 - 2
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<MeshRenderer>();
@@ -184,7 +184,7 @@ namespace Spine.Unity.Modules {
 			}
 		}
 
-		void OnDisable () {
+		public void OnDisable () {
 			if (skeletonRenderer == null) return;
 			#if SPINE_OPTIONAL_RENDEROVERRIDE
 			skeletonRenderer.GenerateMeshOverride -= HandleRender;