72 lines
1.7 KiB
C#
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("<22><>ֹѡ<D6B9><D1A1>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
|