46 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |