UnityMissingになっているコンポーネントを一括削除する方法です。参考コンポーネントがMissingとは?GameObjectにアタッチされたスクリプトが削除されると、実行すべきスクリプトが見つからずMissing表示になります。この状態になると実行時に次のような警告が出力されます。このスクリプトがアタッチされたPrefabが大量に生成されたら、ログ出力が大量に発生してパフォーマンス低下・・ということもありそうです。この記事ではこのようにMissingになっているスクリプトを一括でデタッチする方法を紹介します。二つ方法があるけどスマートな解決策はないさてこの現象の解決方法を調べると、大きく二つの方法が議論されています。一つ目はSerializedObjectを編集してしまう方法です。answers.unity.comただ記事にも書いてありますが、Sceneにこの方法を適用すると、正常にMissingは解消されるものの、Unityがクラッシュしてしまいます。実際試してみたところ、どうやらこの方法で編集したSceneを閉じてから他のSceneを閉じるとクラッシュするようです。二つ目の方法は、Missingなコンポーネントを洗い出してSelection.objectsに加える方法です。Componentを行います。Componentは手動で行う必要があります。複数のシーンを一括で処理したりしづらそうです。Unity2019では専用のメソッドが用意されているこんな感じでスマートな解決策がないので、Unity2019では専用のメソッドが用意されたみたいです。docs.unity3d.comその名もGameObjectUtility.RemoveMonoBehavioursWithMissingScript。実にスマートに実装できそうなメソッド名です。Unity2018では使えないので、今回は検証していません。次節ではUnity2018で対応した方法を紹介します。Unity2018で対応した方法ベストな実装方法を色々と考えたのですが、結局以下の方針にしました。SerializedObjectを編集する方法を使うただし編集したアセットを保存して他のシーンを開くと落ちるそのためシーンはAdditiveモードで開いていって一連の処理中は閉じない全部の処理が終わった後にUnityを再起動することでクラッシュを防ぐかなり対症療法的ではありますが、Unityのクラッシュがどうにもならない以上仕方ないです。ソースコードは下記の通りになりました。Scenesを選択することでMissingなコンポーネントがあればデタッチされます。変更が加わった場合には最後に再起動処理が走ります。ログ出力したいだけの場合MissingしているコンポーネントがアタッチされているGameObjectをログ出力したいだけならこんな感じです。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。【Unity】【エディタ拡張】テクスチャを指定したUV座標で切り取って保存する【Unity】指定したアセットのAssetBundle名を取得する【Unity】【シェーダ】スクリプトからVP行列を渡してシェーダで座標変換に使う【Unity】【シェーダ】FloatやVectorをリニアライズ対象にするGammaアトリビュート【Unity】【Addressable】アセットバンドルのダウンロード・ロード処理をカスタムする月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。