private static void StoreHierarchyData(Scene targetScene, ref HashSet <GameObject> alreadySelectedGameObjects) { if (EditorApplication.isPlayingOrWillChangePlaymode) { return; } if (!SceneKeeperTools.IsHierarchyKeeperActive()) { return; } int[] expandedItemIDs = UnityHierarchyTools.GetExpandedItems(); HierarchyData data = SceneData.GetOrAddSceneData(targetScene.path); data.itemsPath.Clear(); for (int i = 0; i < expandedItemIDs.Length; i++) { int instanceID = expandedItemIDs[i]; Object targetObj = EditorUtility.InstanceIDToObject(instanceID); if (targetObj == null) { continue; } if (targetObj.hideFlags.HasFlag(HideFlags.HideInHierarchy) || targetObj.hideFlags.HasFlag(HideFlags.NotEditable) || targetObj.hideFlags.HasFlag(HideFlags.HideAndDontSave)) { continue; } if (targetObj is GameObject gameObject) { if (alreadySelectedGameObjects.Contains(gameObject)) { continue; } string scenePath = gameObject.scene.path; if (!string.Equals(targetScene.path, scenePath, StringComparison.OrdinalIgnoreCase)) { continue; } data.itemsPath.Add(gameObject.transform.GetPath()); } } }
private static void RestoreHierarchyData(Scene scene, ref HashSet <string> alreadySelectedGameObjectPaths) { if (!SceneKeeperTools.IsHierarchyKeeperActive()) { return; } for (int i = 0; i < SceneData.alwaysExpanded.Count; i++) { string alwaysExpandedItemPath = SceneData.alwaysExpanded[i]; if (TryToFindInAllOpenScenes(alwaysExpandedItemPath, out GameObject targetGameObject)) { alreadySelectedGameObjectPaths.Add(alwaysExpandedItemPath); UnityHierarchyTools.SetExpanded(targetGameObject.GetInstanceID(), true); } } if (!SceneData.TryGetSceneData(scene.path, out HierarchyData sceneHierarchyData)) { return; } UnityHierarchyTools.SetExpanded(scene.handle, true); for (int i = 0; i < sceneHierarchyData.itemsPath.Count; i++) { string expandedItemPath = sceneHierarchyData.itemsPath[i]; if (alreadySelectedGameObjectPaths.Contains(expandedItemPath)) { continue; } if (!TryToFindBySceneRootObjects(scene, expandedItemPath, out GameObject gameObjectAtPath)) { continue; } UnityHierarchyTools.SetExpanded(gameObjectAtPath.GetInstanceID(), true); } }