#if UNITY_EDITOR using System.Collections.Generic; using UnityEngine; namespace UguiToolkit.Editor { [ExecuteAlways] public class EntityManager : MonoBehaviour, IManager { private PanelCache m_panelCache; private Transform entityRoot; private List imageEntities; private List textEntities; private void Start() { GlobalManager.Instance.OnShowHierarchyOfEntityChange += UpdateHierarchyOfEntityAllEntity; } private void OnDestroy() { GlobalManager.Instance.OnShowHierarchyOfEntityChange -= UpdateHierarchyOfEntityAllEntity; } public void InitAllEntity(PanelCache panelCache) { this.m_panelCache = panelCache; // 创建所有实例 CreateAllEntity(); } private void UpdateHierarchyOfEntityAllEntity(bool show) { UpdateHierarchyOfEntity(show, entityRoot.gameObject); foreach (var entity in imageEntities) UpdateHierarchyOfEntity(show, entity.gameObject); foreach (var entity in textEntities) UpdateHierarchyOfEntity(show, entity.gameObject); } private void UpdateHierarchyOfEntity(in bool show, in GameObject entity) { EntityHelper.UpdateHierarchyOfEntity(show, entity.gameObject); EntityHelper.UpdateSceneVisibilityOfEntity(show, entity.gameObject); } private void CreateAllEntity() { if (this.m_panelCache == null) return; var go = new GameObject(); UpdateHierarchyOfEntity(false, go); entityRoot = go.transform; entityRoot.SetParent(transform); entityRoot.localPosition = Vector3.zero; entityRoot.localRotation = Quaternion.identity; entityRoot.localScale = Vector3.one; imageEntities = new(m_panelCache.layoutInfo.Count); textEntities = new(m_panelCache.layoutInfo.Count); foreach (var elementInfo in m_panelCache.GetLayoutElementInfos()) { var imgInfo = elementInfo as LayoutInfo.ImageInfo; if (imgInfo != null) // Image { go = new GameObject(); var entity = go.AddComponent(); entity.transform.SetParent(entityRoot); entity.transform.SetSiblingIndex(0); entity.SetData(imgInfo); entity.InitPreviewImage(); imageEntities.Add(entity); UpdateHierarchyOfEntity(false, entity.gameObject); continue; } var textInfo = elementInfo as LayoutInfo.TextInfo; if (textInfo != null) // Text { go = new GameObject(); var entity = go.AddComponent(); entity.transform.SetParent(entityRoot); entity.transform.SetSiblingIndex(0); entity.SetData(textInfo); entity.InitPreviewText(); textEntities.Add(entity); UpdateHierarchyOfEntity(false, entity.gameObject); continue; } } } } } #endif