[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;
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();

View File

@ -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;