using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.SceneManagement; namespace BrewMonster.Scripts.Utils.Editor { public static class ClearMissingScript { [MenuItem("Tools/Brew Monster/Clear Missing Script")] public static void ClearMissingScriptsInActiveScene() { var scene = SceneManager.GetActiveScene(); if (!scene.IsValid()) { EditorUtility.DisplayDialog("Clear Missing Script", "No valid active scene.", "OK"); return; } int removedCount = 0; var roots = scene.GetRootGameObjects(); foreach (var root in roots) { Undo.RegisterFullObjectHierarchyUndo(root, "Clear Missing Scripts"); removedCount += RemoveMissingScriptsRecursive(root); } if (removedCount > 0) { EditorSceneManager.MarkSceneDirty(scene); } EditorUtility.DisplayDialog("Clear Missing Script", $"Removed {removedCount} missing script(s).", "OK"); } private static int RemoveMissingScriptsRecursive(GameObject gameObject) { int removed = GameObjectUtility.RemoveMonoBehavioursWithMissingScript(gameObject); for (int i = 0; i < gameObject.transform.childCount; i++) { removed += RemoveMissingScriptsRecursive(gameObject.transform.GetChild(i).gameObject); } return removed; } } }