Files
test/Assets/PerfectWorld/Scripts/Utils/Editor/ClearMissingScript.cs
T
2025-10-18 10:54:09 +07:00

46 lines
1.3 KiB
C#

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;
}
}
}