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

This commit is contained in:
Harald Csaszar 2019-02-07 22:22:56 +01:00
parent 7b690624f3
commit 7ee15d0627
2 changed files with 22 additions and 4 deletions

View File

@ -51,6 +51,7 @@ namespace Spine.Unity.Modules {
SerializedProperty separatorNamesProp; SerializedProperty separatorNamesProp;
static bool skeletonRendererExpanded = true; static bool skeletonRendererExpanded = true;
bool slotsReapplyRequired = false; bool slotsReapplyRequired = false;
bool partsRendererInitRequired = false;
void OnEnable () { void OnEnable () {
if (component == null) if (component == null)
@ -78,6 +79,14 @@ namespace Spine.Unity.Modules {
} }
public override void OnInspectorGUI () { 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; var componentRenderers = component.partsRenderers;
int totalParts; int totalParts;
@ -177,6 +186,7 @@ namespace Spine.Unity.Modules {
if (GUILayout.Button(addMissingLabel, GUILayout.Height(40f))) { if (GUILayout.Button(addMissingLabel, GUILayout.Height(40f))) {
AddPartsRenderer(extraRenderersNeeded); AddPartsRenderer(extraRenderersNeeded);
DetectOrphanedPartsRenderers(component); DetectOrphanedPartsRenderers(component);
partsRendererInitRequired = true;
} }
} }
} }
@ -202,14 +212,22 @@ namespace Spine.Unity.Modules {
} }
// (Button) Add Part Renderer button // (Button) Add Part Renderer button
if (GUILayout.Button("Add Parts Renderer")) if (GUILayout.Button("Add Parts Renderer")) {
AddPartsRenderer(1); AddPartsRenderer(1);
partsRendererInitRequired = true;
}
} }
} }
} }
serializedObject.ApplyModifiedProperties(); serializedObject.ApplyModifiedProperties();
if (partsRendererInitRequired) {
Undo.RegisterCompleteObjectUndo(component.GetComponent<MeshRenderer>(), "Add Parts Renderers");
component.OnEnable();
partsRendererInitRequired = false;
}
if (slotsReapplyRequired && UnityEngine.Event.current.type == EventType.Repaint) { if (slotsReapplyRequired && UnityEngine.Event.current.type == EventType.Repaint) {
component.SkeletonRenderer.ReapplySeparatorSlotNames(); component.SkeletonRenderer.ReapplySeparatorSlotNames();
component.SkeletonRenderer.LateUpdate(); component.SkeletonRenderer.LateUpdate();

View File

@ -151,7 +151,7 @@ namespace Spine.Unity.Modules {
} }
#endregion #endregion
void OnEnable () { public void OnEnable () {
if (skeletonRenderer == null) return; if (skeletonRenderer == null) return;
if (copiedBlock == null) copiedBlock = new MaterialPropertyBlock(); if (copiedBlock == null) copiedBlock = new MaterialPropertyBlock();
mainMeshRenderer = skeletonRenderer.GetComponent<MeshRenderer>(); mainMeshRenderer = skeletonRenderer.GetComponent<MeshRenderer>();
@ -184,7 +184,7 @@ namespace Spine.Unity.Modules {
} }
} }
void OnDisable () { public void OnDisable () {
if (skeletonRenderer == null) return; if (skeletonRenderer == null) return;
#if SPINE_OPTIONAL_RENDEROVERRIDE #if SPINE_OPTIONAL_RENDEROVERRIDE
skeletonRenderer.GenerateMeshOverride -= HandleRender; skeletonRenderer.GenerateMeshOverride -= HandleRender;