using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
|
public class RendererAdjuster : MonoBehaviour
|
{
|
|
public int sortingOrder = 0;
|
|
public string customSortingLayer = "UI";
|
|
public List<Renderer> renderers = new List<Renderer>();
|
|
protected Canvas canvas;
|
|
public Action<string, int> onSortingChanged;
|
|
protected void Awake()
|
{
|
UpdateComps();
|
}
|
|
public void SetSortingOrder(int sortingOrder)
|
{
|
this.sortingOrder = sortingOrder;
|
UpdateComps();
|
UpdateSortingOrder();
|
}
|
|
protected void UpdateComps()
|
{
|
renderers.Clear();
|
renderers.AddRange(gameObject.GetComponentsInChildren<Renderer>(true));
|
|
canvas = GetComponent<Canvas>();
|
}
|
|
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;
|
if (!string.IsNullOrEmpty(sortingLayer))
|
{
|
canvas.sortingLayerName = sortingLayer;
|
}
|
}
|
|
onSortingChanged?.Invoke(sortingLayer, sortingOrder);
|
}
|
}
|