こんにちは、ともくんのゲーム作り部屋にようこそ!
このページでは、
「Prefabの項目にMissingと表示された時ってどうしたらいいの?」
「Prefabの中身を変更しようとして、エラーになってしまった…。」
というお悩みの方に向けた内容となっています。
Unityでゲームを作っていく際に、オブジェクトの生成などで必ずと言っていいほど使うのがPrefabです。
このPrefabってめちゃくちゃ便利なのですが、ちょっと中身を変更したいなって思っていじっていると、オブジェクトが赤字になり「Missing」というエラーにちょくちょく遭遇します。

このエラーは、参照していたPrefabを削除した時に起きるエラーで、元のPrefabを戻してあげれば簡単に解消することができます。
ちなみにこのエラー、僕がよくやってしまうのが、Prefabの中身を変更したくて、一度シーン内に配置して中身を変更、そして再度同じ名前でPrefab化しようとして、元のPrefabをそのまま削除してしまったときに起きています。
そこで、このページでは、UnityでPrefabがMissingとなってしまったときの直し方と、そもそもエラーを表示させずにPrefabを正しく更新・解除する方法についてまとめていきます。
PrefabがMissingと表示される原因
PrefabがMissingと表示されてしまうエラーは、冒頭でも書いた通り、参照していたPrefabが見つからなくなってしまったことが原因で、主にPrefabを削除した際に発生しています。
例えば、以下のようにPrefab化したオブジェクトをシーン内に配置していたとします。

この状態でPrefabのオブジェクトをアセットフォルダから削除すると、先ほど配置していたオブジェクトが赤字となり、インスペクターのPrefab欄がMissingというエラーで表示されているのが分かります。

一応これでもオブジェクト自体は表示されたままですが、参照先は切れているため、直しておく必要があります。
Missingが表示されたときの直し方
PrefabにMissingが表示されてしまったときの直し方として、
- ゴミ箱などからPrefabファイルを戻す
- もう一度アタッチ処理を行う(必要があれば)
を行っていきます。
ゴミ箱などから手動で戻す
誤って削除してしまったPrefabファイルは、通常完全に削除されているわけではなく、WindowsなどのOSにあるゴミ箱に入ることになります。
実際に、Windowsのゴミ箱の中を見てみると、先ほど削除したPrefabファイルが以下のように残っているのがわかります。

ここで、拡張子が「.prefab」と「.meta」という2つのファイルがありますが、結論としてどちらもセットでUnityに戻してあげるのが良いです。
「.prefab」の方はPrefab本体となるデータファイルであるのに対して、「.meta」はUnityの内部でそのPrefabを管理するためのデータファイルとなっていて、他と重複しないGUIDで管理しているものになります。
つまりPrefabファイルからシーン内に配置したオブジェクトというのは、この「.meta」で管理しているIDデータを使ってPrefabファイルを参照しているため、基本的にセットで戻してあげることで、エラーを解消することができます。
元に戻す場合は、2つのファイルを選択した状態で右クリックから「元に戻す」を選択して一緒に戻すのが、最も早いと思います。

実際に、先ほどのエラー時にゴミ箱から戻してみたところ、ヒエラルキー上の赤字が消えMissingの表示も無くなりました。

もう一度アタッチ処理を行う
もし、ゴミ箱からも完全に削除してしまってアセットを新しく作り直した場合や、Prefabファイルを戻したけどエラーが解消されないような場合は、もう一度Prefab化した後にオブジェクト自体にアタッチ処理を行う必要があります。
特に、.metaファイルって何に使われているのかよく分からないので、誤って削除してしまうことも多いと思います。
作業自体はそこまで難しくなく、アセットフォルダに新たにPrefab化したファイルを、Missingと表示されている参照先にドラッグ&ドロップしてあげることで、Prefabが再アタッチされてエラーが解消されます。

Missingを表示させないための正しいPrefabの扱い方
さて、ここまでMissingのエラーを解消する方法をまとめていきましたが、今回の記事はここからがメインとなってきます。
というのも、誤ってPrefabを消してしまった場合はここまで書いた方法で直せばいいのですが、Prefabの中身を変更したり、Prefabとの連動を解除するのが目的でPrefabを削除することがあります。
そのまま強引に進めることもできますが、毎回エラー表示されてしまうのはあんまり気分が良くないですし、そもそも正しいやり方では無いはずです。
そこで、今後同じようにMissingのエラーが表示されないように、Prefabの中身を修正して更新する場合と、Prefabとの紐づけを解除する場合における正しいやり方をまとめておきます。
Prefabの中身を変更・更新する方法
まずPrefabの中身を変更して更新したい場合、
- Prefabファイルを直接変更して更新する
- Prefabを紐づけたオブジェクトから変更内容を更新する
という2つのパターンがあります。
Prefabファイルを直接変更する
まず、Prefabファイルを直接変更する方法はいくつかありますが、分かりやすい方法として、アセットフォルダにあるPrefabファイルをダブルクリックして開きます。
すると以下のようにシーンビューでPrefabオブジェクトが開くのですが、この状態で中身を編集すると、Prefabファイル自体に修正がかかるようになり、同じPrefabを紐づけているオブジェクトのすべてに修正が反映されます。

実際に簡単な例として、オレンジ色の四角いオブジェクトをPrefab化しておき、シーン内にそのPrefabから3つ取り出して、以下のように配置しておきます。

そして、元のPrefabファイルを開き、インスペクターウィンドウから色を緑色に変更してみます。
すると、以下のようにPrefabの内容が更新・反映されるので、すべてのオブジェクトの色が緑色に変更されます。

Prefabを紐づけたオブジェクトから変更内容を更新する
次に、シーンに配置してあるPrefabと連動したオブジェクトの内容を変更し、その変更内容を元のPrefabにも反映させたいという場合です。
僕はこのパターンのときに方法が分からず、いちいち元のPrefabの削除を行ってしまっていたため、Missingエラーを何度も表示させていました。
このPrefabと連動したオブジェクトを選択して、インスペクターウィンドウ上の「Overrides」という項目をクリックすると、元のPrefabと変更されている部分が表示されるようになります。

この中で変更箇所を選択して「Apply」を押すと、元のPrefabにその変更を反映させることができます。(「Apply All」で全ての変更を反映させます。)

ちなみにもう一つの「Revert」を選択すると、元のPrefabが持つ内容に戻すことができます。
こちらも実際にUnityで操作をしてみます。
先ほどと同じように、Prefab化したオレンジ色のオブジェクトを3つシーンに配置しておき、一番左のオブジェクトだけを緑色に変更しておきます。

この緑色のオブジェクトを選択して「Overrides」をクリックすると、元のPrefabと比べてSpriteRendererで色が変更されたという内容が表示されるので、「Apply」を選択してあげます。

すると、元のPrefabに対して色が変更された内容が反映・更新され、さらに配置した全てのオブジェクトが一括して緑色に変更されているのがわかると思います。

元のPrefabとの連動を解除する方法(Unpack)
Prefabから配置したオブジェクトに対して、Prefabとの紐づけを解除したいからPrefabを削除してしまうこともあると思います。
これでも問題は無いのですが、もう少しきれいなやり方があります。
それは、ヒエラルキーウィンドウからPrefabと連動したオブジェクトを右クリックして、Prefab > Unpackを選択します。

これを選択すると、Prefabとの連動が即解除されて、何も紐づいていない通常のオブジェクトに戻すことができます。
これなら、Prefabが不要で削除した場合でも、オブジェクトをそのまま使用することができます。
まとめ
このページでは、UnityでPrefabを扱っている時に表示されることがあるMissingのエラー原因と直し方、またエラー表示されないPrefabの正しい扱い方をまとめていきましたが、いかがでしたでしょうか?
PrefabでMissingという表示がされるのは、連動していたPrefabが削除されてしまったときに、Prefabが見つからないというエラーです。
そのため、Prefabを戻して再アタッチしてあげることで、エラーを直すことができます。
また、Prefabの作業は結構勢いで出来てしまうところがあり、僕と同じように元のPrefabをすぐに削除してしまう方もいると思うので、少しでもこの記事が参考になれば幸いです。
最後までお読みいただきまして、ありがとうございました!




コメント