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<Renderer> renderers = new List<Renderer>();
|
|
public void Awake()
|
{
|
UpdateComps();
|
}
|
|
protected void UpdateComps()
|
{
|
renderers.Clear();
|
renderers.AddRange(gameObject.GetComponentsInChildren<Renderer>(true));
|
|
canvas = GetComponentInParent<Canvas>();
|
}
|
|
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;
|
}
|
}
|
}
|
}
|
}
|