Unityで作業していると、突然Inspectorに「Missing (MonoBehaviour)」が出たり、Consoleに「The referenced script on this Behaviour is missing!」と表示されたりすることがあります。
特に初心者のうちは、
- 「これ消して大丈夫…?」
- 「Prefab壊れた?」
- 「スクリプトあるのに何でMissingなの?」
こんなふうに、かなり焦りますよね。
私も最初の頃、Prefabを整理していたら大量にMissing Scriptが発生して、「プロジェクト終わったかも…」と本気で冷や汗をかいたことがあります🙂
ただ、実際には「本当に危険なケース」と「落ち着いて直せば大丈夫なケース」はかなりハッキリ分かれています。
このエラーは、Unityの「スクリプト参照の仕組み」を理解すると、原因をかなり絞り込みやすくなります。
例えば、
- コンパイルエラーで一時的にMissingになっているだけ
- クラス名とファイル名がズレている
- Prefab VariantのOverrideが壊れている
- .metaファイルのGUID不整合が起きている
など、見た目は同じでも中身はかなり違います。
しかも、原因によって「消してOK」なのか、「絶対に消さないほうがいい」のかも変わります。
そこで今回は、Unityで「The referenced script on this Behaviour is missing!」が出る原因を、初心者でも順番に確認できる形で整理していきます。
「まず何を見るべきか」「どこまで危険なのか」「どう直せば再発しにくいのか」まで、実際によくあるパターンを交えながら見ていきましょう。
Unityの「The referenced script on this Behaviour is missing」の原因は?
先に結論からいうと、このエラーは「GameObjectやPrefabに残っているスクリプト参照を、Unityが見つけられなくなった状態」で発生します。
しかも厄介なのが、見た目は同じMissing Scriptでも、原因は1つではないことです。
まずは次の5つを、上から順番に確認してみてください。
| 症状 | 最初に疑う原因 | 発生頻度 |
|---|---|---|
| Consoleが赤エラーだらけ | コンパイルエラー | 非常に多い |
| スクリプトは存在するのにMissing | クラス名とファイル名不一致 | 多い |
| 特定Prefabだけ壊れている | Prefab VariantやOverride問題 | 多い |
| Git pull後に大量発生 | .metaファイルのGUID不整合 | 中〜多い |
| DLL化・asmdef変更後 | 参照先変更 | 中程度 |
最優先はConsoleの赤エラー確認
Unityでは、プロジェクト内にコンパイルエラーが1つでもあると、スクリプト全体の読み込みが止まることがあります。
その結果、本当は存在しているスクリプトでも、一時的にMissing Scriptとして表示されるケースがあります。
この状態でPrefabやSceneを触り始めると、逆に問題を広げてしまうこともあるんですよね。
なので、まず最初にやるべきなのは、Consoleウィンドウを開いて赤いエラーを全部確認することです。
特に初心者の方は、Missing表示そのものに気を取られがちです。
でも実際には、「原因は別のスクリプトのセミコロン抜けだった」ということも普通にあります🙂
「スクリプトあるのにMissing」は名前不一致が多い
例えば、ファイル名が PlayerController.cs なのに、中のクラス名がこうなっているケースです。
public class PlayerControl : MonoBehaviour
UnityはMonoBehaviourを認識する時、ファイル名とクラス名が一致していることを前提にしています。
なので、
- クラス名変更
- 大文字小文字変更
- リネーム途中の保存ミス
などでもMissingになることがあります。
「スクリプトは存在しているのにInspectorではMissing」という時は、かなり怪しいポイントです。
Prefabだけ壊れているならVariantを疑う
Scene上では正常なのに、PrefabだけMissingになることもあります。
特にPrefab Variantを使っている場合は、
- 親Prefab側の変更
- Variant側のOverride
- コンポーネント削除履歴
このあたりが絡んで、古い参照が残ることがあります。
「直したのに再発する」という場合は、SceneではなくPrefab本体を確認したほうがいいケースが多いです。
Git管理しているなら.metaを疑う
Gitを使っている場合、Missing Script大量発生の原因としてかなり多いのが .meta ファイル問題です。
Unityはスクリプトをファイル名ではなく、「GUID」という識別子で管理しています。
そのGUIDは.metaファイルに保存されています。
つまり、
- .metaが消える
- 別人のmetaで上書きされる
- 競合解決をミスする
と、Unityから見ると「別スクリプト」扱いになってしまいます。
Git pull後に突然Missingだらけになった時は、かなり高確率でここが原因です。

逆に言うと、「突然大量発生した」のか、「特定Objectだけなのか」で、かなり原因を絞れます。
Unity Missing Scriptが出る仕組み
Missing Scriptをちゃんと理解するうえで大事なのが、「Unityはスクリプトをどう管理しているか」です。
ここを知っていると、原因の切り分けがかなり速くなります。
逆に、この仕組みを知らないまま対処すると、
- 不要なRemove Component
- Prefab破損
- meta事故の悪化
みたいな“二次被害”が起きやすいんですよね。
Unityはスクリプトをファイル名で管理していない
初心者の頃は、「Player.cs があるから Unityも Player.cs を見てる」と思いがちです。
でも実際には、Unityはファイル名そのものではなく、.meta ファイルの中にあるGUIDで参照を管理しています。
例えば、
Player.cs
Player.cs.meta
という2つのファイルがある場合、重要なのは Player.cs.meta 側です。
このmetaファイルの中には、こんなGUID情報が入っています。
guid: xxxxxxxxxxxxxxxxxxxxx
PrefabやSceneは、このGUIDを使って「どのスクリプトを参照しているか」を覚えています。
つまり、スクリプト本体が存在していても、GUIDとの紐付けが崩れるとMissingになります。
これが、
- 「スクリプトあるのにMissing」
- 「Git pull後だけ壊れる」
- 「meta消したら全部死んだ」
みたいな現象の正体です。
Missing Scriptは「データ消失」とは限らない
「Missing」と表示されると、プロジェクト全体が壊れたように見えてかなり焦ります。
でも、多くの場合は「参照先が見つからないだけ」で、PrefabやSceneのデータ自体は残っています。
例えば、こんな状態ですね。
- GameObjectは存在している
- Transformも値も残っている
- ただしスクリプトだけリンク切れ
なので、正しいスクリプトを再アタッチすると復旧できるケースも多いです。
逆に、「慌ててRemove Componentしたあとに、本当は必要だったと気づく」パターンもかなりあります。
特にPrefab本体でやると、Variant側にも影響することがあるので注意したいところです。
初心者が誤解しやすいポイント
Missing Script周りで、かなり多い誤解があります。
- 「Library削除すれば全部直る」
- 「Missingは全部消してOK」
- 「スクリプトあるならUnity側のバグ」
もちろん、Library削除で改善するケースもあります。
ただ、これはキャッシュ再生成によって一時的不整合が解消される場合がある、という話です。
GUID破損やmeta競合そのものを直しているわけではありません。
また、Missingを全部削除してしまうと、本来必要だったコンポーネント参照まで消えることがあります。
特にチーム開発や購入アセットでは、「あとで原因が判明したけど、もう元に戻せない…」という事故も起きやすいです。
このあたりは、「今すぐ消す」より、「まず原因を絞る」ほうが大事だったりします。
Unity Missing Scriptの直し方
Missing Scriptを直す時に大事なのは、「とりあえず削除する」ではなく、原因を1つずつ切り分けることです。
特にPrefabやVariantが絡む場合、勢いで消すと後から復旧がかなり面倒になります。
まずは、影響範囲が大きい順ではなく、「発生しやすい順」に確認していきましょう。
Consoleのコンパイルエラーを直す
最初に確認するのは、やはりConsoleです。
赤いエラーが残っている場合、Unityがスクリプトを正常にコンパイルできていない可能性があります。
この状態では、存在しているMonoBehaviourでも一時的にMissing表示になることがあります。
例えば、こんなケースですね。
Assets/Scripts/Test.cs(15,20): error CS1002: ; expected
たった1つのセミコロン抜けでも、関連スクリプト全体の読み込みが止まることがあります。
なので、Missingを触る前に、まず赤エラーをゼロにしてください。
実際、ここを直しただけでMissingが自然に消えるケースはかなり多いです。
クラス名とファイル名を確認する
次によくあるのが、クラス名とファイル名の不一致です。
例えば、
PlayerController.cs
というファイルなのに、中身がこうなっているケースです。
public class PlayerControl : MonoBehaviour
UnityはMonoBehaviourを認識する時、
- ファイル名
- クラス名
が一致していることを前提にしています。
なので、
- リネーム途中で保存した
- 大文字小文字を変えた
- クラス名だけ修正した
などでもMissingになることがあります。
「スクリプトは存在するのにMissing」の時は、かなり優先度高めで疑ってOKです。
Missing Scriptを再アタッチする
スクリプト自体が正常なら、Inspectorから再アタッチすると直る場合があります。
手順はシンプルです。
- Missing (MonoBehaviour) が付いているObjectを選択
- 正しいスクリプトをProjectからドラッグ
- Missing欄へドロップ
ただし、ここで迷いやすいのが「Remove Componentしていいのか問題」です。
これは状況で判断が変わります。
| 状況 | 削除してOK度 |
|---|---|
| テスト用Object | 高い |
| 使わない古いPrefab | 比較的OK |
| 本番Prefab | 慎重 |
| 購入アセット | かなり慎重 |
| Prefab Variant | 慎重 |
特にPrefab本体で削除すると、Variant側にも影響が広がることがあります。
「もう使ってないと思う」で消したら、後からUIやイベントが壊れていた…というのは結構あるあるです。
Prefab Modeで修正する
Scene上だけ修正しても、Prefab本体が壊れていると再発することがあります。
なので、Prefab関連でMissingが出ている時は、Prefab Modeを開いて確認するのが安全です。
特に、
- 何度直しても戻る
- 別Sceneでも発生する
- Variantだけ壊れる
このあたりはPrefab本体側に原因があることが多いです。
Sceneインスタンスだけ直して安心していると、「再生したらまたMissing」が起きやすいんですよね。
Overridesを確認する
Prefab Variantを使っている場合は、Inspector上部のOverridesも確認してみてください。
Variant側だけ古い参照を持っているケースがあります。
例えば、
- 親Prefabでコンポーネント削除
- Variant側で独自Override
- Apply/Revert不整合
などが重なると、VariantだけMissingになることがあります。
この場合、
- 不要OverrideならRevert
- 必要Overrideなら再設定
という判断になります。
GUID・meta不整合を直す方法
ここからは少し中級者向けの内容です。
もし、
- Git pull後に大量Missingが発生した
- Prefabが一斉に壊れた
- スクリプトは存在しているのに復旧しない
という状態なら、GUIDや.metaファイルの不整合を疑ったほうがいいかもしれません。
このあたりはUnity内部の参照管理に関わるので、操作前にバックアップを取っておくのがおすすめです。
Gitやmeta競合で何が起きるのか
Unityでは、スクリプトやPrefabをGUIDで管理しています。
そのGUIDは.metaファイルに保存されています。
つまり、Git管理中にこんなことが起きると危険です。
- .metaファイルを消した
- 別人のmetaで上書きされた
- 競合解決を間違えた
- Explorer/Finderで直接移動した
するとUnityから見ると、
「前のスクリプトとは別物」
として扱われます。
結果として、PrefabやScene側に残っているGUIDと一致しなくなり、Missing Scriptになります。
特にチーム開発では、
- 片方だけmeta変更
- .gitignore設定ミス
- Unityバージョン差異
などでも発生することがあります。
Force Textを有効にする
GUID不整合を調査する時は、Asset SerializationをText形式にすると確認しやすくなります。
手順はこちらです。
Edit > Project Settingsを開くEditorを選択Asset Serializationを探すMode = Force Textに変更する
これを有効にすると、
- .prefab
- .unity
- .asset
などがテキスト形式で保存されます。
その結果、GUIDを直接確認できるようになります。
Git差分も見やすくなるので、チーム開発ではかなり定番の設定です。
GUIDを確認・置換する手順
もし「正しいスクリプトは存在しているのに参照だけ壊れている」なら、GUID修正で復旧できるケースがあります。
大まかな流れはこんな感じです。
- 正常なスクリプトの.metaを開く
guid:の値を確認する- 壊れている.prefabや.unityを開く
- 古いGUIDを検索する
- 正しいGUIDへ置換する
例えば.metaファイルには、こんな記述があります。
guid: 1234567890abcdef1234567890abcdef
Prefab側では、このGUIDを参照しています。
なので、GUIDだけズレている場合は、置換で復旧することがあります。
ただし、この方法はかなり慎重に扱う必要があります。
- 別GUIDまで誤置換する
- Prefab構造を壊す
- Scene全体に影響する
といった事故も起こり得ます。
個人的には、
- 大量Missing発生
- Git履歴がある
- 原因GUIDが特定できている
この3つが揃っている時だけ検討するくらいが安全かなと思います。
逆に、初心者のうちは無理に直接編集せず、
- 再アタッチ
- Prefab修正
- meta復元
から試すほうが事故は少ないです。
Unity Missing Scriptを防ぐ方法
Missing Scriptは、一度大量発生すると修正コストがかなり重くなります。
特にPrefabやSceneが増えてくる中盤以降のプロジェクトでは、「直す」より「発生させない」ほうが大事になってきます。
ここでは、実際にトラブルを減らしやすい運用方法をまとめます。
ExplorerやFinderで移動しない
かなり基本ですが、実は一番多い事故原因の1つです。
Unityプロジェクト内のファイルを、
- Explorer
- Finder
- 外部ファイル管理ツール
から直接移動・リネームすると、metaとの紐付けが崩れることがあります。
特に、
Player.cs
Player.cs.meta
の片方だけ移動されると、GUID管理が壊れます。
Unity上では「別ファイル」と認識されるので、Prefab参照がMissingになりやすいんですよね。
なので、基本は必ずProjectウィンドウ内で操作するのがおすすめです。
Unity側が自動でmetaも一緒に管理してくれます。
metaファイルをGit管理する
Gitを使っている場合、.metaファイルは絶対に無視しないようにしてください。
初心者の頃は、
- 「metaって不要そう」
- 「差分多いから消したい」
と思いやすいんですが、Unityではかなり重要なファイルです。
もしmetaが共有されていないと、チームメンバーごとにGUIDが変わってしまいます。
その結果、
- 自分だけ正常
- 他メンバーだけMissing
- Git pull後に大量破損
みたいな状態になりやすいです。
特にPrefabやAddressablesを使っているプロジェクトでは、meta管理はかなり重要になります。
Prefab Variantを増やしすぎない
Prefab Variantは便利ですが、増えすぎると参照関係がかなり複雑になります。
例えば、
- 親Prefab変更
- 子Variant Override
- さらに孫Variant
という構造になると、「どこで参照が壊れたのか」が見えにくくなります。
特に、コンポーネント削除やスクリプト差し替えを繰り返していると、古いOverrideが残ることがあります。
「VariantだけMissingになる」ケースは、このあたりが原因のことも多いです。
なので、
- Variant階層を深くしすぎない
- 不要Overrideを整理する
- Prefab責務を分ける
この3つを意識すると、かなり事故を減らせます。
大量Missingを防ぐ運用ルールを作る
プロジェクトが大きくなるほど、「誰でも同じルールで触れる状態」が大事になります。
例えば、
- 命名規則を統一する
- 勝手にDLL化しない
- meta削除禁止にする
- Project外で移動しない
- Git競合解決ルールを決める
こういう運用だけでも、かなり事故率が下がります。
また、Inspectorが複雑になってくると、参照ミスそのものを見逃しやすくなります。
大規模Prefabや複雑なデータ構造を扱うなら、Inspector整理系ツールを使うのもかなり便利です。
Odin Inspector
✅アセットストアでチェックする

特に、Serialize管理や参照可視化がしやすくなるので、「どこに何が入っているか分からない問題」を減らしやすいです。
Unity Missing Scriptでよくある誤解
Missing Scriptは、見た目のインパクトが強いぶん、誤解したまま対処してしまうケースがかなり多いです。
しかも、「なんとなく直った」が起きやすいので、根本原因を見逃しやすいんですよね。
ここでは、特によくある勘違いを整理しておきます。
「Library削除すれば絶対直る」は誤解
Unityトラブルで定番なのが、「とりあえずLibrary削除」です。
確かに、
- キャッシュ破損
- インポート不整合
- 一時的なコンパイル問題
が原因なら改善することがあります。
ただし、GUID不整合やmeta破損そのものを直しているわけではありません。
例えば、metaファイルが別GUIDに変わってしまっている場合、Libraryを消しても参照切れは残ります。
なので、Library削除は「最後の確認手段」くらいで考えるのが安全です。
先に、
- Consoleエラー
- クラス名
- Prefab
- meta
を確認したほうが、原因特定しやすいことが多いです。
「Missingは全部削除してOK」は危険
InspectorにMissingが並んでいると、つい全部Removeしたくなります。
でも、これは結構危ないケースがあります。
例えば、
- イベント参照
- SerializeField
- UI制御
- 外部アセット依存
など、本来必要なスクリプトだった可能性もあります。
特に購入アセットでは、
- 別Packageに依存
- サンプルScene依存
- Optional機能
などが絡むこともあります。
なので、
「不要と分かっているものだけ削除」
くらいがちょうどいいです。
判断できない場合は、Prefabバックアップを取ってから触るのがおすすめです。
「Prefab直したのに再発する」
これはPrefab VariantやOverride絡みでかなり多いです。
例えば、Scene上で修正しても、Prefab本体側に古い参照が残っていると、再読み込み時に戻ることがあります。
逆に、Prefab本体を直しても、Variant側Overrideが残っていると、Variantだけ再発することもあります。
この場合は、
- Prefab本体
- Variant
- Overrides
- Apply/Revert状態
をセットで確認する必要があります。
「直したのに戻る」は、かなり高確率でここです。
「DLL化すれば安全」はケース次第
プロジェクト整理でDLL化を検討することがあります。
ただ、DLL化すると参照構造が変わるため、既存Prefabとの紐付けが切れるケースがあります。
特に、
- asmdef再編
- Assembly名変更
- GUID変化
が起きると、Missing Script化することがあります。
もちろん、DLL化自体が悪いわけではありません。
ただ、「既存プロジェクト途中で構造変更する時は慎重に」という感じですね。
大規模改修前は、
- Git commit
- Prefabバックアップ
- 検証用ブランチ
を用意しておくと、かなり安心です。
Unity Missing Script診断チェックリスト
「結局どこから見ればいいの?」となった時は、次の順番で確認するとかなり切り分けしやすいです。
私も実際、Missing Script系はこの順番で確認することが多いです。
上から順番に見るだけでも、かなり原因を絞れます。
1. Consoleの赤エラーを確認する
まず最優先です。
Consoleに赤エラーがある場合、Missingそのものではなく、コンパイル失敗が原因の可能性があります。
特に、
- 名前空間エラー
- セミコロン抜け
- 型エラー
- asmdef問題
などで、一時的にMonoBehaviourが読み込めなくなることがあります。
Missingを触る前に、まず赤エラーゼロを目指してください。
2. スクリプトファイルが存在するか確認する
Projectウィンドウ内で、該当スクリプトが存在するか確認します。
もし見当たらない場合は、
- 削除した
- 移動した
- Git pullで消えた
- metaだけ残った
などが考えられます。
ExplorerやFinderで直接触った直後なら、かなり怪しいです。
3. クラス名とファイル名を確認する
スクリプトが存在していても、
- クラス名変更
- 大文字小文字違い
- MonoBehaviour継承漏れ
などでMissingになることがあります。
例えば、
Enemy.cs
public class enemy : MonoBehaviour
のようなケースですね。
「スクリプトあるのにMissing」は、この確認がかなり重要です。
4. Prefab本体を確認する
Scene上だけ直しても、Prefab本体側が壊れていると再発します。
特に、
- 複数Sceneで同じMissing
- 再生後に戻る
- Apply後も再発
なら、Prefab本体側を疑ったほうがいいです。
Prefab Modeで直接確認するのがおすすめです。
5. Prefab VariantとOverridesを確認する
Variant運用している場合は、Overridesが残っていないか確認します。
特に、
- 親Prefab変更
- Variant独自削除
- Apply/Revert不整合
があると、VariantだけMissingになることがあります。
「親は正常なのに子だけ壊れる」は、このパターンがかなり多いです。
6. Git変更履歴を確認する
Git管理中なら、最近の変更履歴も重要です。
例えば、
- .meta競合
- 別ブランチ統合
- 大量rename
- Asset移動
があると、GUID崩れが発生することがあります。
「昨日までは正常だった」のなら、Git差分を確認すると原因が見つかりやすいです。
7. metaファイルを確認する
最後に、GUID不整合を疑います。
特に、
- 大量Missing
- Prefab全滅
- Scene全体崩壊
みたいな状態なら、meta問題の可能性があります。
この段階では、
- Force Text
- GUID確認
- Git復元
なども視野に入ってきます。
逆に言うと、ここまで来る前に直るケースもかなり多いです。

まずは「Console → 名前 → Prefab」の順で見るだけでも、初心者のうちはかなり解決しやすくなります。
まとめ
Unityの「The referenced script on this Behaviour is missing!」は、かなり焦るエラーです。
でも実際には、「Unityがスクリプト参照を見失っている状態」であることがほとんどです。
まずは次の順番で確認するだけでも、かなり原因を絞りやすくなります。
- Consoleの赤エラー確認
- スクリプト存在確認
- クラス名とファイル名確認
- Prefab本体確認
- Variant / Override確認
- meta・GUID確認
特に初心者のうちは、「Missingを全部消す」より、「なぜ参照が切れたのか」を見るほうが大切です。
実際、かなり多いのはこの3パターンです。
- コンパイルエラー
- クラス名不一致
- Prefab VariantのOverride崩れ
逆に、GUID直接編集やmeta復旧が必要になるケースは、そこまで頻繁ではありません。
なので、最初から難しい復旧方法に飛ばなくても大丈夫です🙂
また、Missing Scriptは「発生後に直す」より、「発生しにくい運用」を作るほうが圧倒的にラクです。
例えば、
- Projectウィンドウ内で移動する
- .metaをGit管理する
- Variantを増やしすぎない
- Prefab責務を整理する
このあたりだけでも、かなり事故率が下がります。
特に大規模プロジェクトでは、「Inspectorが複雑すぎて参照を見失う問題」も増えてきます。
そういう時は、Inspector整理やSerialize管理をしやすくするツールもかなり便利です。
Easy Save
✅アセットストアでチェックする
シリアライズ構造を理解しておくと、Missing Scriptだけでなく、Prefab・保存・参照トラブル全般の理解がかなり深まります。
「なんとなくUnityを触る」状態から一歩抜けるきっかけにもなるので、今回のエラーを“Unity内部構造を知るチャンス”として見るのもおすすめです。
よくある質問(FAQ)
- QMissing Scriptは削除しても大丈夫?
- A
不要なコンポーネントだと確信できるなら、Remove Componentして問題ないケースもあります。
ただし、Prefab本体や購入アセットでは慎重に判断したほうが安全です。
特に、
- UIイベント
- SerializeField参照
- 外部システム連携
- Prefab Variant
などが絡む場合、「見えていない依存関係」が残っていることがあります。
迷った時は、
- Prefabをバックアップ
- 原因確認
- 不要と判断してから削除
の順がおすすめです。
- QスクリプトはあるのにMissingになるのはなぜ?
- A
かなり多いのが、
- クラス名とファイル名不一致
- コンパイルエラー
- GUID不整合
です。
特に初心者の頃は、「ファイルが存在する = Unityも認識している」と思いやすいんですが、UnityはGUIDベースで管理しています。
なので、スクリプト本体が存在していても、参照先GUIDがズレるとMissingになります。
また、コンパイルエラー中は一時的にMissing表示されることもあるので、まずConsole確認がかなり重要です。
- QGit pull後に大量Missingになった時は?
- A
この場合は、metaファイル競合をかなり疑ったほうがいいです。
特に、
- .meta未共有
- 競合解決ミス
- Asset移動
- 別ブランチ統合
が直前にあると、GUID不整合が発生しやすいです。
まずは、
- Git差分確認
- .meta復元
- Force Text確認
- GUID比較
の順で確認してみてください。
いきなりPrefabを全部修正し始めるより、先にmeta側を疑ったほうが、復旧がかなり早いケースもあります。










※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。