using System; using UnityEngine; using UnityEditor; using System.Collections.Generic; namespace AlicizaX.UXTool { public static class UXSelectionUtil { public static void AddSelectionChangedEvent(Action e) { Selection.selectionChanged += e; } public static void RemoveSelectionChangedEvent(Action e) { Selection.selectionChanged -= e; } // 存储选中物体的缓存列表 private static List gameObjectsCache = new List(); /// /// 获取当前选中的所有物体(排除包含StageEngine脚本的物体)。 /// public static GameObject[] gameObjects { get { gameObjectsCache.Clear(); // 清空缓存 GameObject[] selectedObjects = Selection.gameObjects; foreach (var obj in selectedObjects) { if (obj.GetComponent() == null &&obj != PrefabStageUtils.StageRoot.gameObject) // 排除StageEngine脚本的物体 { gameObjectsCache.Add(obj); } } return gameObjectsCache.ToArray(); } set => Selection.objects = value; } /// /// 获取当前选中的第一个物体(排除包含StageEngine脚本的物体)。 /// public static GameObject activeGameObject { get { var selectedObjects = gameObjects; return selectedObjects.Length > 0 ? selectedObjects[0] : null; } set { Selection.activeGameObject = value; } } /// /// 获取当前选中的所有物体(排除StageEngine脚本的物体),并清除掉包含StageEngine脚本的物体。 /// private static void ClearStageEngineSelection() { GameObject[] selectedObjects = Selection.gameObjects; List validSelections = new List(); // 遍历选中的物体,排除包含StageEngine脚本的物体 foreach (var obj in selectedObjects) { if (obj.GetComponent() == null) // 如果没有StageEngine脚本,则保留 { validSelections.Add(obj); } } // 清除所有选中物体 Selection.objects = validSelections.ToArray(); } /// /// 获取当前选中的物体并清除选中列表中包含StageEngine脚本的物体。 /// public static GameObject[] clearedGameObjects { get { ClearStageEngineSelection(); // 清理包含 StageEngine 脚本的物体 return gameObjects; // 返回已经清理过的选中物体 } } } }