以下の内容はhttps://bluebirdofoz.hatenablog.com/entry/2025/08/11/231648より取得しました。


Unityでプレハブ内のMissingScriptを自動で削除する

本日はUnityの小ネタ枠です。
Unityでプレハブ内のMissingScriptを自動で削除する方法です。

MissingScript

スクリプトの削除やリファクタリングの際に以下のようなMissingScriptがプレハブやシーン内に残ってしまうことがあります。
これらは手動で削除することもできますが数が多いと手間がかかります。

GameObjectUtility.RemoveMonoBehavioursWithMissingScript

RemoveMonoBehavioursWithMissingScript関数は指定のゲームオブジェクトからMissingScriptを削除します。
docs.unity3d.com

サンプルスクリプト

指定のプレハブから内のMissingScriptを自動で削除する以下のサンプルスクリプトを作成しました。
スクリプトをEditorフォルダに配置すると、Tools/Remove Missing Scripts From Select Prefabsメニューが追加されます。
・RemoveMissingScripts.cs

using UnityEditor;
using UnityEngine;

public class RemoveMissingScripts
{
    [MenuItem("Tools/Remove Missing Scripts From Select Prefabs")]
    public static void RemoveFromSelectPrefabs()
    {
        // 現在選択中のプレハブを取得する
        GameObject[] selected = Selection.gameObjects;
        foreach (GameObject targetObject in selected)
        {
            // プレハブのGUIDを取得し、ファイルパスを取得する
            string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(targetObject));
            string path = AssetDatabase.GUIDToAssetPath(guid);

            // プレハブの内容をゲームオブジェクトとして取得する
            GameObject contents = PrefabUtility.LoadPrefabContents(path);

            // MissingScriptを削除する
            RemoveMissingFromGameObject(contents);

            // 編集したゲームオブジェクトをプレハブとして保存する
            PrefabUtility.SaveAsPrefabAsset(contents, path);
            PrefabUtility.UnloadPrefabContents(contents);
        }

        Debug.Log("選択したプレハブからMissing Scriptを削除しました。");
    }

    private static void RemoveMissingFromGameObject(GameObject targetObject)
    {
        // オブジェクトにアタッチされているMissing Scriptを削除する
        int removed = GameObjectUtility.RemoveMonoBehavioursWithMissingScript(targetObject);
        if (removed > 0) Debug.Log($"{removed}個のMissingScriptを{targetObject.name}から削除しました。");

        // 再帰的に子オブジェクトも処理する
        foreach (Transform child in targetObject.transform)
        {
            RemoveMissingFromGameObject(child.gameObject);
        }
    }
}

MissingScriptの削除を行いたいプレハブを選択した状態で、メニューから[Tools -> Remove Missing Scripts From Select Prefabs]を実行します。

これで対象のプレハブから全てのMissingScriptが自動で削除されます。




以上の内容はhttps://bluebirdofoz.hatenablog.com/entry/2025/08/11/231648より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14