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 renderers = new List(); // private List skeletonAnimations = new List(); protected Canvas canvas; public int canvasOffset = 1; public Action onSortingChanged; protected void Awake() { UpdateComps(); } public void SetSortingOrder(int sortingOrder) { this.sortingOrder = sortingOrder; UpdateComps(); UpdateSortingOrder(); } protected void UpdateComps() { renderers.Clear(); renderers.AddRange(gameObject.GetComponentsInChildren(true)); // skeletonAnimations.Clear(); // skeletonAnimations.AddRange(gameObject.GetComponentsInChildren(true)); canvas = GetComponentInChildren(true); } 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); } }