using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class RendererAdjuster : MonoBehaviour { public int renderQueue = 3000; public Canvas canvas; public int sortingOrderOffset = 1; public string customSortingLayer = "UI"; public List renderers = new List(); public void Awake() { UpdateComps(); } protected void UpdateComps() { renderers.Clear(); renderers.AddRange(gameObject.GetComponentsInChildren(true)); canvas = GetComponentInParent(); } public void SetParentCanvas(Canvas _canvas) { canvas = _canvas; this.DelayFrame(UpdateSortingOrder); } public void UpdateSortingOrder() { int canvasSortingOrder = 0; // 获取父级Canvas的排序顺序 if (canvas != null) { canvasSortingOrder = canvas.sortingOrder; } else { // 如果没有找到父级Canvas,则使用默认值 canvasSortingOrder = 0; } // 将特效的排序顺序设置为Canvas排序顺序加上偏移量 ApplySortingSettings(canvasSortingOrder + sortingOrderOffset, customSortingLayer); } private void ApplySortingSettings(int sortingOrder, string sortingLayer) { foreach (Renderer renderer in renderers) { if (renderer != null) { renderer.sortingOrder = sortingOrder; renderer.material.renderQueue = renderQueue; // 设置渲染队列 // renderer.material.renderQueue = overlayRQ; if (!string.IsNullOrEmpty(sortingLayer)) { renderer.sortingLayerName = sortingLayer; } } } } }