| | |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using UnityEngine.UI; |
| | | |
| | |
| | | public bool autoAdjustSorting = true; |
| | | |
| | | [Tooltip("特效渲染器,如果为空则自动获取")] |
| | | public Renderer[] effectRenderers; |
| | | |
| | | [Tooltip("特效粒子系统,如果为空则自动获取")] |
| | | public ParticleSystem[] particleSystems; |
| | | public List<Renderer> effectRenderers = new List<Renderer>(); |
| | | |
| | | [Tooltip("自定义排序顺序,仅在不自动调整时有效")] |
| | | public int customSortingOrder = 0; |
| | |
| | | public Canvas parentCanvas; |
| | | |
| | | [Tooltip("特效在Canvas中的排序偏移量")] |
| | | public int _sortingOrderOffset = 0; |
| | | public int sortingOrderOffset = 1; |
| | | |
| | | public int canvasSortingOrder = 0; |
| | | |
| | | public int renderQueue = 3000;//默认值 |
| | | |
| | | private void Awake() |
| | | { |
| | | transform.GetComponentsInChildren(true, effectRenderers); |
| | | |
| | | // 如果没有指定渲染器,则自动获取 |
| | | if (effectRenderers == null || effectRenderers.Length == 0) |
| | | if (effectRenderers == null || effectRenderers.Count == 0) |
| | | { |
| | | effectRenderers = GetComponentsInChildren<Renderer>(true); |
| | | transform.GetComponentsInChildren<Renderer>(true, effectRenderers); |
| | | } |
| | | |
| | | // 如果没有指定粒子系统,则自动获取 |
| | | if (particleSystems == null || particleSystems.Length == 0) |
| | | { |
| | | particleSystems = GetComponentsInChildren<ParticleSystem>(true); |
| | | } |
| | | |
| | | |
| | | // 查找父级Canvas |
| | | if (parentCanvas == null) |
| | | { |
| | | parentCanvas = GetComponentInParent<Canvas>(); |
| | | } |
| | | |
| | | |
| | | if (autoAdjustSorting) |
| | | { |
| | | UpdateSortingOrder(); |
| | |
| | | // 如果没有找到父级Canvas,则使用默认值 |
| | | canvasSortingOrder = 0; |
| | | } |
| | | |
| | | |
| | | // 将特效的排序顺序设置为Canvas排序顺序加上偏移量 |
| | | ApplySortingSettings(canvasSortingOrder + _sortingOrderOffset, customSortingLayer); |
| | | ApplySortingSettings(canvasSortingOrder + sortingOrderOffset, customSortingLayer); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | if (renderer != null) |
| | | { |
| | | renderer.sortingOrder = sortingOrder; |
| | | renderer.material.renderQueue = renderQueue; // 设置渲染队列 |
| | | // renderer.material.renderQueue = overlayRQ; |
| | | if (!string.IsNullOrEmpty(sortingLayer)) |
| | | { |
| | | renderer.sortingLayerName = sortingLayer; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 应用到粒子系统 |
| | | foreach (ParticleSystem ps in particleSystems) |
| | | { |
| | | if (ps != null) |
| | | { |
| | | ParticleSystemRenderer psRenderer = ps.GetComponent<ParticleSystemRenderer>(); |
| | | if (psRenderer != null) |
| | | { |
| | | psRenderer.sortingOrder = sortingOrder; |
| | | // psRenderer.material.renderQueue = overlayRQ; |
| | | if (!string.IsNullOrEmpty(sortingLayer)) |
| | | { |
| | | psRenderer.sortingLayerName = sortingLayer; |
| | | } |
| | | } |
| | | } |
| | | } |