FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム »2021年03月
2021年03月の記事一覧

【Unity】「Missing (Script)」を修復する  


 最初に断っておきます。たぶん、正しいやり方というわけではないので、どうにもならないときの最終手段くらいに思って下さい(笑)。

 ちゃんとしたやり方なら、以下の記事を参照した方が良いかも?

Unityのプロジェクトはなぜ壊れるのか。原因と対策

 まぁ、Git 管理していて、すぐに元に戻せる状態なら、手早く直したいときの方法くらいで(笑)。

(※) Unity 2019.4.17f1 / Windows10(x64) で確認



 残念ながら、Unity はバージョンのアップグレード等を行うと、アセットが壊れることがたまにある。運悪く、今回プロジェクトをアップデートしてたら、アタッチされてるスクリプトが「Missing」になってしまった。



 ただいつもの最小テスト用のプロジェクトだったので、実は何が壊れているかはだいたいわかっていた。しかし、せっかくなので、何か試しにツールでも入れて自動修復できないかとググってみたら(←何でも自動化できないかと考える人(笑))、あまり良い情報が出てこない(なぜか Animation の Missing 修復ばかり出てくる)。

 念の為、差分ツールでスクリプト自体をバージョン比較してみたけど、何1つ変更が加わってない。本当に「ただ参照が外れている」だけのようだ。

 そういうときには、壊れていると思われるスクリプトをプロジェクトビューで右クリックして、「Show in Explorer」でフォルダを開いてみよう。スクリプトと同じ名前で「.meta」ファイルがあるハズだ。

 そして、そのファイルを適当なテキストエディタで開き、guid を覗いてみる。もし、それが以前のバージョンと異なっているなら、参照が外れた原因になっている可能性が高い

●Missing になってるスクリプトの 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 の対処法


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityトラブルシューティング 
tb: 0   cm: --


プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop