【Unity】「Missing (Script)」を修復する 
2021/03/09 Tue [edit]
最初に断っておきます。たぶん、正しいやり方というわけではないので、どうにもならないときの最終手段くらいに思って下さい(笑)。
ちゃんとしたやり方なら、以下の記事を参照した方が良いかも?
・Unityのプロジェクトはなぜ壊れるのか。原因と対策
まぁ、Git 管理していて、すぐに元に戻せる状態なら、手早く直したいときの方法くらいで(笑)。
(※) Unity 2019.4.17f1 / Windows10(x64) で確認
残念ながら、Unity はバージョンのアップグレード等を行うと、アセットが壊れることがたまにある。運悪く、今回プロジェクトをアップデートしてたら、アタッチされてるスクリプトが「Missing」になってしまった。

ただいつもの最小テスト用のプロジェクトだったので、実は何が壊れているかはだいたいわかっていた。しかし、せっかくなので、何か試しにツールでも入れて自動修復できないかとググってみたら(←何でも自動化できないかと考える人(笑))、あまり良い情報が出てこない(なぜか Animation の Missing 修復ばかり出てくる)。
念の為、差分ツールでスクリプト自体をバージョン比較してみたけど、何1つ変更が加わってない。本当に「ただ参照が外れている」だけのようだ。
そういうときには、壊れていると思われるスクリプトをプロジェクトビューで右クリックして、「Show in Explorer」でフォルダを開いてみよう。スクリプトと同じ名前で「.meta」ファイルがあるハズだ。
そして、そのファイルを適当なテキストエディタで開き、guid を覗いてみる。もし、それが以前のバージョンと異なっているなら、参照が外れた原因になっている可能性が高い。

●以前の正常な状態のスクリプトの meta の guid

※異なっているなら、これが原因の場合も多い
meta の内容が異なってることが確認できたら、Git で meta だけ戻しても良いし、古いプロジェクトから 「.meta」ファイルだけ取り出して、上書きコピーしても良い。要するにシーンが参照している guid と meta の guid が合っているなら、Missing が復活する。
(参考)Unityのプロジェクトはなぜ壊れるのか。原因と対策

※meta だけ以前のバージョンに戻したら、復活した
かなり強硬策だが、これで直ることも多い。私はライブラリの一部が壊れたとき、正常にアタッチされていた旧 unitypackage で怪しいと思われるスクリプトの meta だけを上書きして直したこともある(全部やると原因がわかりずらいのと、インスペクタの値が変わってしまう可能性があるので、最小限で候補を絞って試すと特定しやすい)。
例えば、アップデートする前に guid のスナップショットをとって、比較するツールなんかあると、自動化できるかもね。まぁ、いつも壊れるわけではないので(そして、大量のアセットのスキャンも時間もかかるだろうし)、Git で戻る方が簡単かも知れないが…。
しかし、意外と需要ありそうなのに、自動修復ツールって無いんだなぁ…(Git で戻ってもいいけど、アップグレードって時間かかるので、全部は戻したくないんだよね…(笑))。
(関連記事)
【Unity】Unity2019以降で新規作成したアセットは、Unity2018以前にインポートすると壊れる?
【Unity】SymGetSymFromAddr64, GetLastError: '無効なアドレスにアクセスしようとしています。' と出たら…
【Unity】【C#】オーディオ再生でのエラー:An invalid seek position was passed to this function の対処法
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/394-3cf3c30c
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |