UnityのエディタでMissingになっているコンポーネントを取得・削除する方法についてまとめました。
Unity2020.2.7f1
コンポーネントがMissingとは?
GameObjectにアタッチされたスクリプトが削除されると、実行すべきスクリプトが見つからずMissing表示になります。
この状態になると実行時に次のような警告が出力されます。
またMissingなスクリプトが付いているGameObjectはPrefabにすることができず、
PrefabにしてからアタッチされているスクリプトがMissingになるとPrefabモードに入ることができません。
取得・削除する
Unityではエディタの機能としてMissingなコンポーネントの数を取得したり、削除したりするAPIが存在します。
- Missingなコンポーネントの数を取得: GameObjectUtility.GetMonoBehavioursWithMissingScriptCount()
- Missingなコンポーネントを削除: GameObjectUtility.RemoveMonoBehavioursWithMissingScript()
それぞれ以下のようにして使用します。
using UnityEditor; using UnityEngine; public class Example { [MenuItem("Example/Log Missing Script Count")] private static void LogMissingScriptCount() { var gameObject = Selection.activeGameObject; if (gameObject == null) { return; } var missingCount = GameObjectUtility.GetMonoBehavioursWithMissingScriptCount(gameObject); Debug.Log(missingCount); } [MenuItem("Example/Remove Missing Scripts")] private static void RemoveMissingScripts() { var gameObject = Selection.activeGameObject; if (gameObject == null) { return; } var missingCount = GameObjectUtility.RemoveMonoBehavioursWithMissingScript(gameObject); Debug.Log(missingCount); } }
この機能はUnity2019から
なお、このAPIが追加されたのはUnity2019からになります。
それ以前のUnityでは以下のような対応が必要になります。