using UnityEngine; using UnityEditor; using UnityEditor.SceneManagement; using System.Collections.Generic; public class HiddenGameObjectTools : EditorWindow { #region Menu Command [MenuItem("Tools/Hidden GameObject Tools")] public static void ShowWindow() { var window = GetWindow(); window.titleContent = new GUIContent("Hidden GOs"); window.GatherHiddenObjects(); } #endregion #region GUI private static readonly GUILayoutOption ButtonWidth = GUILayout.Width(80); private static readonly GUILayoutOption BigButtonHeight = GUILayout.Height(35); private void OnGUI() { GUILayout.Space(10f); GUILayout.BeginHorizontal(); { if (GUILayout.Button("Refresh", BigButtonHeight)) { GatherHiddenObjects(); } if (GUILayout.Button("Test", BigButtonHeight, ButtonWidth)) { var go = new GameObject("HiddenTestObject"); go.hideFlags = HideFlags.HideInHierarchy; GatherHiddenObjects(); } } GUILayout.EndHorizontal(); GUILayout.Space(10f); EditorGUILayout.LabelField("Hidden Objects (" + HiddenObjects.Count + ")", EditorStyles.boldLabel); for (int i = 0; i < HiddenObjects.Count; i++) { var hiddenObject = HiddenObjects[i]; GUILayout.BeginHorizontal(); { var gone = hiddenObject == null; GUILayout.Label(gone ? "null" : hiddenObject.name); GUILayout.FlexibleSpace(); if (gone) { GUILayout.Box("Select", ButtonWidth); GUILayout.Box("Reveal", ButtonWidth); GUILayout.Box("Delete", ButtonWidth); } else { if (GUILayout.Button("Select", ButtonWidth)) { Selection.activeGameObject = hiddenObject; } if (GUILayout.Button(IsHidden(hiddenObject) ? "Reveal" : "Hide", ButtonWidth)) { hiddenObject.hideFlags ^= HideFlags.HideInHierarchy; EditorSceneManager.MarkSceneDirty(hiddenObject.scene); } if (GUILayout.Button("Delete", ButtonWidth)) { var scene = hiddenObject.scene; DestroyImmediate(hiddenObject); EditorSceneManager.MarkSceneDirty(scene); } } } GUILayout.EndHorizontal(); } } #endregion #region Hidden Objects private List HiddenObjects = new List(); private void GatherHiddenObjects() { HiddenObjects.Clear(); var allObjects = FindObjectsOfType(); foreach (var go in allObjects) { if ((go.hideFlags & HideFlags.HideInHierarchy) != 0) { HiddenObjects.Add(go); } } Repaint(); } private static bool IsHidden(GameObject go) { return (go.hideFlags & HideFlags.HideInHierarchy) != 0; } #endregion }