瀏覽代碼

[unity] Improved UpdateWhenInvisible logic for SkeletonRenderSeparator. Closes #2519.

Harald Csaszar 1 年之前
父節點
當前提交
77e859cb31

+ 23 - 0
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<Spine.Unity.SkeletonPartsRenderer> partsRenderers = new List<SkeletonPartsRenderer>();
+		[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) {