| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using System; | 
| using Spine.Unity; | 
|   | 
| public class RendererAdjuster : MonoBehaviour | 
| { | 
|   | 
|     public int sortingOrder = 0; | 
|   | 
|     public string customSortingLayer = "UI"; | 
|   | 
|     public List<Renderer> renderers = new List<Renderer>(); | 
|   | 
|     // private List<SkeletonAnimation> skeletonAnimations = new List<SkeletonAnimation>(); | 
|   | 
|     protected Canvas canvas; | 
|   | 
|     public int canvasOffset = 1; | 
|   | 
|     public Action<string, int> onSortingChanged; | 
|   | 
|     protected void Awake() | 
|     { | 
|         UpdateComps(); | 
|     } | 
|   | 
|     public void SetSortingOrder(int sortingOrder) | 
|     { | 
|         this.sortingOrder = sortingOrder; | 
|         UpdateLayer(); | 
|     } | 
|   | 
|     protected void UpdateComps() | 
|     { | 
|         renderers.Clear(); | 
|         renderers.AddRange(gameObject.GetComponentsInChildren<Renderer>(true)); | 
|   | 
|         // skeletonAnimations.Clear(); | 
|         // skeletonAnimations.AddRange(gameObject.GetComponentsInChildren<SkeletonAnimation>(true)); | 
|   | 
|         canvas = GetComponentInChildren<Canvas>(true); | 
|     } | 
|   | 
|     [ContextMenu("UpdateLayer")] | 
|     private void UpdateLayer() | 
|     { | 
|         UpdateComps(); | 
|         UpdateSortingOrder(); | 
|     } | 
|   | 
|     public void UpdateSortingOrder() | 
|     { | 
|         // 将特效的排序顺序设置为Canvas排序顺序加上偏移量 | 
|         ApplySortingSettings(sortingOrder, customSortingLayer); | 
|     } | 
|      | 
|   | 
|     private void ApplySortingSettings(int sortingOrder, string sortingLayer) | 
|     { | 
|         foreach (Renderer renderer in renderers) | 
|         { | 
|             if (renderer != null) | 
|             { | 
|                 renderer.sortingOrder = sortingOrder; | 
|                 if (!string.IsNullOrEmpty(sortingLayer)) | 
|                 { | 
|                     renderer.sortingLayerName = sortingLayer; | 
|                 } | 
|             } | 
|         } | 
|   | 
|         if (null != canvas) | 
|         { | 
|             canvas.sortingOrder = sortingOrder + canvasOffset; | 
|             if (!string.IsNullOrEmpty(sortingLayer)) | 
|             { | 
|                 canvas.sortingLayerName = sortingLayer; | 
|             } | 
|         } | 
|   | 
|         // foreach (var skeletonAnim in skeletonAnimations) | 
|         // { | 
|   | 
|         // } | 
|   | 
|         onSortingChanged?.Invoke(sortingLayer, sortingOrder); | 
|     } | 
| } |