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) {