using System.Collections; using System.Collections.Generic; using UnityEngine; using GameCore; using System; namespace GameLogic { /// /// UI特效 /// public class UIEffect : MonoBehaviour { /// /// 目标画布 /// [SerializeField] protected Canvas canvas; /// /// 偏移值 /// [SerializeField] protected int offset; /// /// 渲染器有序列表(SortingOrder排序) /// List list = new List(); public Canvas Canvas { get { if (canvas == null) canvas = this.transform.GetComponentInParent(); return canvas; } set { canvas = value; } } private void Awake() { list.AddRange(GetComponentsInChildren()); list.Sort(RendererCompare.Instance); } /// /// 设置特效的偏移值,保证特效内部偏移值正确 /// /// public void SetOffset(int offset) { this.offset = offset; } private void Update() { if (Canvas) { int count = 0; int tmpOrder = int.MinValue; for (int i = 0; i < list.Count; i++) { if (tmpOrder < list[i].sortingOrder) { tmpOrder = list[i].sortingOrder; count++; } list[i].sortingOrder = Canvas.sortingOrder + offset + count; } } } } /// /// 渲染器比较工具 /// public class RendererCompare : Singleton, IComparer { public int Compare(Renderer x, Renderer y) { if (x.sortingOrder > y.sortingOrder) return 1; else if (x.sortingOrder == y.sortingOrder) return 0; else return -1; } } }