From 8f01d089e43d66ac303e1b078cb599f5a601dcb4 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Mon, 10 Oct 2022 16:25:47 +0200 Subject: [PATCH] [Unity] SkeletonRenderSeparator: Fixed `Update When Invisible` modes leading to invisible skeleton. Fixed `Enable Separator` property not triggering component dirty state/undo. Closes #1960. --- .../SkeletonRenderSeparatorInspector.cs | 8 ++++--- .../SkeletonRenderSeparator.cs | 21 +++++++++++-------- 2 files changed, 17 insertions(+), 12 deletions(-) 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 d2004adf6..39c26d228 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 @@ -105,8 +105,10 @@ namespace Spine.Unity.Examples { using (new SpineInspectorUtility.LabelWidthScope()) { bool componentEnabled = component.enabled; bool checkBox = EditorGUILayout.Toggle("Enable Separator", componentEnabled); - if (checkBox != componentEnabled) - component.enabled = checkBox; + if (checkBox != componentEnabled) { + Undo.RecordObject(target, "Enable SkeletonRenderSeparator"); + EditorUtility.SetObjectEnabled(target, checkBox); + } if (component.SkeletonRenderer.disableRenderingOnOverride && !component.enabled) EditorGUILayout.HelpBox("By default, SkeletonRenderer's MeshRenderer is disabled while the SkeletonRenderSeparator takes over rendering. It is re-enabled when SkeletonRenderSeparator is disabled.", MessageType.Info); @@ -242,7 +244,7 @@ namespace Spine.Unity.Examples { if (slotsReapplyRequired && UnityEngine.Event.current.type == EventType.Repaint) { component.SkeletonRenderer.ReapplySeparatorSlotNames(); - component.SkeletonRenderer.LateUpdate(); + component.SkeletonRenderer.LateUpdateMesh(); SceneView.RepaintAll(); slotsReapplyRequired = false; } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs index 08cdc43e7..b64363b21 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs @@ -124,7 +124,7 @@ namespace Spine.Unity { if (!Application.isPlaying) { skeletonRenderer.enabled = false; skeletonRenderer.enabled = true; - skeletonRenderer.LateUpdate(); + skeletonRenderer.LateUpdateMesh(); } #endif @@ -187,6 +187,9 @@ namespace Spine.Unity { mr.probeAnchor = probeAnchor; } } + + if (skeletonRenderer.updateWhenInvisible != UpdateMode.FullUpdate) + skeletonRenderer.LateUpdateMesh(); } public void OnDisable () { @@ -194,13 +197,8 @@ namespace Spine.Unity { #if SPINE_OPTIONAL_RENDEROVERRIDE skeletonRenderer.GenerateMeshOverride -= HandleRender; #endif - - skeletonRenderer.LateUpdate(); - - foreach (var partsRenderer in partsRenderers) { - if (partsRenderer != null) - partsRenderer.ClearMesh(); - } + skeletonRenderer.LateUpdateMesh(); + ClearPartsRendererMeshes(); } MaterialPropertyBlock copiedBlock; @@ -262,8 +260,13 @@ namespace Spine.Unity { if (currentRenderer != null) partsRenderers[rendererIndex].ClearMesh(); } - } + protected void ClearPartsRendererMeshes () { + foreach (var partsRenderer in partsRenderers) { + if (partsRenderer != null) + partsRenderer.ClearMesh(); + } + } } }