com.soviby.unity.ui.ugui-to.../Assets/Editor/Manager/SelectionManager.cs
2024-12-06 18:46:00 +08:00

72 lines
1.7 KiB
C#

#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<Object> 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<TextMeshProUGUI>(out var _))
{
m_objs.Add(parent.gameObject);
changed = true;
continue;
}
}
m_objs.Add(obj);
}
if (changed)
{
Selection.objects = m_objs.ToArray();
}
}
}
}
#endif