using System.Collections.Generic; using UnityEngine; namespace XGame.Framework.UI { public class UILayerBehaviour : MonoBehaviour { [SerializeField] private UILayer _layer; [SerializeField] private Canvas _uiCanvas; public Canvas UiCanvas => _uiCanvas; public Transform UIRoot => _uiCanvas.transform; private List _panels = new List(); public UILayer Layer { get => _layer; set { _layer = value; _uiCanvas.sortingOrder = (byte)value * 100; gameObject.name = value.ToString(); } } /// /// 加入子节点 /// 将Transform移动到本地变换列表的末尾 /// /// public void AddPanel(IUIPanel panel) { var panelTr = (panel as UIPanel).transform; if (!_panels.Contains(panel)) { panelTr.SetParent(UIRoot, false); panelTr.position = Vector3.zero; _panels.Add(panel); OnChildrenChanged(); } //将Transform移动到本地变换列表的末尾 panelTr.SetAsLastSibling(); } /// /// 移除子节点 /// /// public void RemovePanel(IUIPanel panel) { if (!_panels.Contains(panel)) { return; } _panels.Remove(panel); (panel as UIPanel).transform.SetParent(null, false); OnChildrenChanged(); } private void OnChildrenChanged() { _uiCanvas.gameObject.SetActive(_uiCanvas.transform.childCount > 0); } } }