From 77e859cb31a5fdafd20d72a59cba256bf7a5619b Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Mon, 6 May 2024 20:46:14 +0200 Subject: [PATCH] [unity] Improved UpdateWhenInvisible logic for SkeletonRenderSeparator. Closes #2519. --- .../SkeletonRenderSeparator.cs | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) 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 627647599..77e33cd2d 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 @@ -73,6 +73,7 @@ namespace Spine.Unity { [Tooltip("Copies MeshRenderer flags into each parts renderer")] public bool copyMeshRendererFlags = true; public List partsRenderers = new List(); + [System.NonSerialized] public bool isVisible = true; #if UNITY_EDITOR void Reset () { @@ -197,6 +198,10 @@ namespace Spine.Unity { skeletonRenderer.LateUpdateMesh(); } + public void Update () { + UpdateVisibility(); + } + public void OnDisable () { if (skeletonRenderer == null) return; #if SPINE_OPTIONAL_RENDEROVERRIDE @@ -206,6 +211,24 @@ namespace Spine.Unity { ClearPartsRendererMeshes(); } + public void UpdateVisibility () { + foreach (SkeletonPartsRenderer partsRenderer in partsRenderers) { + if (partsRenderer == null) continue; + + if (partsRenderer.MeshRenderer.isVisible) { + if (!isVisible) { + skeletonRenderer.OnBecameVisible(); + isVisible = true; + } + return; + } + } + if (isVisible) { + isVisible = false; + skeletonRenderer.OnBecameInvisible(); + } + } + MaterialPropertyBlock copiedBlock; void HandleRender (SkeletonRendererInstruction instruction) {