| | |
| | | { |
| | | public int renderQueue = 3000; |
| | | |
| | | public Canvas canvas; |
| | | |
| | | public int sortingOrderOffset = 1; |
| | | public int sortingOrder = 0; |
| | | |
| | | public string customSortingLayer = "UI"; |
| | | |
| | | public List<Renderer> renderers = new List<Renderer>(); |
| | | |
| | | public Action<string, int> onSortingChanged; |
| | | |
| | | public void SetSortingOrder(int sortingOrder) |
| | | { |
| | | this.sortingOrder = sortingOrder; |
| | | UpdateComps(); |
| | | UpdateSortingOrder(); |
| | | } |
| | | |
| | | public void Awake() |
| | | { |
| | | UpdateComps(); |
| | | } |
| | | |
| | | protected void OnEnable() |
| | | { |
| | | UpdateComps(); |
| | | UpdateSortingOrder(); |
| | | } |
| | | |
| | | 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); |
| | | ApplySortingSettings(sortingOrder, customSortingLayer); |
| | | } |
| | | |
| | | private void ApplySortingSettings(int sortingOrder, string sortingLayer) |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | onSortingChanged?.Invoke(sortingLayer, sortingOrder); |
| | | } |
| | | } |