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); 
 | 
    } 
 | 
} 
 |