#if UNITY_EDITOR using Sirenix.OdinInspector; using System.Collections.Generic; using TMPro; using UnityEditor; using UnityEngine; namespace UguiToolkit.Editor { [ExecuteAlways] public class SelectionManager : MonoBehaviour, IManager { [LabelText("·ÀֹѡÔñTMP_Sub Mesh UI"), ShowInInspector, SerializeField] private bool m_noSelectionTmpSubMesh = true; private bool m_selectionChangedFlag; private List m_objs = new(); private void OnEnable() { Selection.selectionChanged += OnSelectionChanged; } private void OnDisable() { Selection.selectionChanged -= OnSelectionChanged; } private void OnSelectionChanged() { m_selectionChangedFlag = true; } private void Update() { if (m_selectionChangedFlag) { m_selectionChangedFlag = false; UpdateSelection(); } } private void UpdateSelection() { m_objs.Clear(); var changed = false; foreach (var obj in Selection.gameObjects) { if (m_noSelectionTmpSubMesh) { var parent = obj.transform.parent; if (parent && parent.TryGetComponent(out var _)) { m_objs.Add(parent.gameObject); changed = true; continue; } } m_objs.Add(obj); } if (changed) { Selection.objects = m_objs.ToArray(); } } } } #endif