using UnityEngine; using UnityEngine.UI; [ExecuteInEditMode] public class SortLayer : MonoBehaviour { // Fields private int _lastOrder; public bool IsUI=true; public bool IsSetAllChild = false; public int LayerOrder; private bool isAddCanvas = false; // Methods public void ResetSortLayer(int iorder) { this.LayerOrder = iorder; this._lastOrder = this.LayerOrder; if (IsUI) { if (base.transform.gameObject.GetComponent() == null) { Canvas canvas = gameObject.AddComponent(); canvas.overrideSorting = true; canvas.sortingOrder = this.LayerOrder; gameObject.AddComponent(); isAddCanvas = true; } else { if (!IsSetAllChild) base.transform.gameObject.GetComponent().sortingOrder = this.LayerOrder; else { var canvases = base.transform.gameObject.GetComponentsInChildren(); foreach (var canvas in canvases) canvas.sortingOrder = this.LayerOrder; } } } else { if (isAddCanvas) { var canvas = gameObject.GetComponent(); if (canvas != null) Destroy(canvas); var rayCanvas = gameObject.GetComponent(); if (rayCanvas != null) Destroy(rayCanvas); } if (!IsSetAllChild) { var render = base.gameObject.GetComponent(); if (render != null) render.sortingOrder = this.LayerOrder; } else { var renders = base.gameObject.GetComponentsInChildren(); if (renders != null && renders.Length > 0) { for (int i = 0; i < renders.Length; i++) { if (renders[i] != null) renders[i].sortingOrder = this.LayerOrder; } } } } } private void Start() { this.ResetSortLayer(this.LayerOrder); } private void Update() { if (this.LayerOrder != this._lastOrder) { this.ResetSortLayer(this.LayerOrder); } } }