【Unity】ちょっと待った! そのスクリプトを消す前にComponentを確認だ!

【Unity】ちょっと待った! そのスクリプトを消す前にComponentを確認だ!

「テスト用に作ったスクリプト、もう使わないからExportした後削除しとこ」

なんてスクリプトを削除した時に、

The referenced script on this Behaviour (Game Object ‘<null>’) is missing!
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

といったエラーが出ることが稀によくあります。

該当のスクリプトが他のスクリプトから参照されていなければゲーム実行ができるため、無視しちゃってもいいケースもありますが、やっぱりWarningが出てくるのは喉の奥に魚の骨が刺さっているようなビミョーな気持ち。

もしビンカンなあなたの上司がコンソールを見てしまったら、「エラーが出てるじゃないか! 早く直せ!」と騒ぎ立てるかもしれません。

なのでさぱっと直しておくといい感じ。

 

環境

macOS 10.13 High Sierra

Unity2018.2.2f1

Warningが出ている状態

このワーニングが出ている時のコンソールはこんな感じ。ゲーム実行時にメッセージをクリアしてもすぐに出てきます。

これが……これがミッシングリンク……!
これが……これがミッシングリンク……!

 

コンソールを狭くしているので若干途切れていますが、メッセージは冒頭のものと一緒です。対象のゲームオブジェクトが異なるくらい。

これ、シーン内にあるオブジェクトが発生元だとコンソールのメッセージをダブルクリックで飛んでくれるのですが、Prefab化したオブジェクトが発生元だと飛ばないので探すのに苦労するんですよね。

私の場合はPrefabが原因でした。それをのぞいてみるとコンポーネントがこんな感じになってました。

Missing!
Missing!

 

コンポーネント内の警告文では、

The associated script can not be loaded.

Please fix any compile errors and assign a valid script.

(関連付けられたスクリプトは読み込めないよ。コンパイルエラーを直して、正しいスクリプトを割り当ててね)

と表示されます。見事にMissing。

残しておいてもアレなので、コンポーネントメニューの[Remove Component]でサクッと外します。Prefab自体不要であれば消してしまってもいいかも。

他にもないかPrefabを点検しつつ、Warningが出なくなることを確認しました。

スクリプトを削除する前には、そのスクリプトを使っていたオブジェクトのコンポーネントを確認すべし。

 

このメッセージが出やすいシチュエーション

プロジェクトでの開発でこのメッセージに遭遇することってそんなにないかも。開発中にごっそりスクリプトファイルを消すとか、阿鼻叫喚のデスいマーチのトリガーになりそうですし、そもそもバージョン管理もしっかりやってるでしょうし。

ありうるのは、テスト的に作った機能をプロジェクトから取り除く時でしょうか。

スクリプトは削除したけど、それを使っていたオブジェクトは消し忘れる、とか。特にPrefabにしているとうっかり忘れやすいです。

ProjectウィンドウではPrefabの子オブジェクトまでしか見られないので、孫オブジェクトにMissingなスクリプトがいると悲しみの向こうへと旅立てます。Hierarchyウィンドウでインスタンス化して中身確認して……なんて作業している姿が目に見えますね。ええ、私の姿です。

あとはリファクタリングした後も要注意です。スクリプトを統合したりなんかするとMissingが出てくるかも。こちらもPrefabが鬼門になるかもしれません。

リファクタリングするタイミングだとProject内のファイル数も多くなって来ますし、結構見つけるのが大変かもしれません。

まとめ

今回紹介したWarningは、コンポーネントとしてアタッチしたスクリプトファイルがプロジェクトフォルダ内に無い時に表示されます。

対処方法は該当のコンポーネントを外すだけなのですが、どのゲームオブジェクトが持つコンポーネントなのかを探し当てるのが大変。

特にPrefab化したオブジェクトで発生しがちなので、そちらを注意して見てみるといいかも。

アセット作ってます!

CTA-IMAGE

Unityでの開発に役立つアセットを作っています。

3DダンジョンRPGを開発するスピードを200%加速するAssetや、ファンタジーRPGのダンジョンを彩るパーツを取り揃えています。

特に3DダンジョンRPGのゲームを1から作るのは結構時間がかかります。ダンジョン部分の作成はこうしたアセットを使って、開発をブーストさせてみませんか?