プロジェクト内で使っているアセットを調べる方法

プロジェクト(Unityの作業フォルダの意味の方)が大きくなってくると、どのアセット(ファイル)を使っているのかわからなくなってきます。
あるプレハブが別のプレハブを参照していたり、シーン内のゲームオブジェクトの深い階層からアセットが参照されていたりすることになっていると、もう管理しきれなくなります。
参照がされているということはそれが必要だということです。間違えて参照がされているアセットをプロジェクトから消してしまうと、それを参照できなくなり何らかの問題が起こるでしょう。

不必要なアセットをプロジェクトに入れておくことは良くないです。不要なアセットを手違いで使ってしまったり、余計な作業の発生があり得るからです。
できることなら不必要なアセットは定期的に削除してしまい、必要なものだけを残していくというのが理想的です。特に大きなプロジェクトだと重くなっていくので、要らないものは極力なくす方が作業を効率的に行うためには重要です。

 

解決策は2つあります。
ひとつはプロジェクトに追加はしても消すことはしないことです。このルールを守るだけで参照できなくなることはありません。解決というよりは臭いものにふた的な発想です。しかしながら、意外と悪くない方法なのです。Unityは使っていないアセットをビルド時に除外するということをやっています。したがって不要なアセットを参照さえしていなければ、ビルドしたものにおいてそれは存在していないのと同じなのです。(Resourcesフォルダにある場合は例外。)

 

もうひとつはプロジェクトで確実に使われていないことを調べたうえでアセットを削除することです。 これを行うのは少し難しいです。また労力もかなりかかります。
アセットのそれぞれにはGUIDと呼ばれる識別子が与えられていて、Unityはそれでアセットを区別することができます。リネームしたり、移動したりしても参照が切れないのはこのGUIDを使ってUnityが参照を管理しているからです。
このようなUnityの管理方法をそのまま自分で再現すれば、どのアセットが使われているのかがわかります。少し手順が複雑になりますが、以下がその手順です。決まった作業なので、頑張れば自動化も可能だと思います。

メニューEdit->Project Settings->Editorを選び、Version ControlのModeをVisible Meta Filesにし、Asset SerializationのModeをForce Textにします。(バージョン管理をしている場合はこれらが設定されているかもしれません。バージョン管理については、ここの記事を参考にどうぞ。)
Version ControlのModeをVisible Meta Filesにすることによりmetaファイルができ、対応するアセットのGUIDを調べることができます。下のようにCube.prefabに対応してCube.prefab.metaというファイルが同じ場所に存在します。

Asset SerializationのModeをForce Textにする理由は、デフォルトでバイナリファイルであるシーンやプレハブのファイルをテキスト形式で保存するためです。これにより全てのアセット内を文字列で検索することが可能になります。GUIDを検索できるようにするために必要というわけです。

metaファイルを開いてみると、こんな感じです。

2行目にguidというものがあり、これがGUIDになります。0c65~でフォルダ内をgrep(複数のファイルを同時に検索)して、どこに同じGUIDがあるかを調べます。
見つかったファイルが検索したGUIDに対応するファイル以外であれば、そこからは参照があるということです。Unityのヒエラルキーやインスペクタ―を使って参照がされていることを確認してみてください。

検索したGUIDに対応するファイルしか見つからなかった場合、それを参照しているアセットは存在しません。よって、それは削除してもかまわないものと見なせそうです。
最後に調べるべきこととして、Resources.Loadを使用して動的なアセットの読み込みを行っていないか調べなくてはいけません。Resources.Loadを使うにはResourcesフォルダ以下にアセットが置かれていなくてはならないので、消そうとしたアセットがResourcesフォルダ以下にないことを確認します。
以上が確認できれば、そのアセットは使われることはないので削除しても問題はありません。

まとめると、安全にアセットを消したい場合は次の2つの条件を満たす必要があるということです。

  1. 対応するmetaファイルにあるGUIDでプロジェクトフォルダをgrepし、検索結果に他のファイルが現れないこと
  2. Resourcesフォルダ以下にアセットがないこと
ひとつのアセットを消すのにこれだけの手間がかかるので、アセットの参照関係を忘れてしまうと大変です。覚えていれば、上記の作業を省けます。

コメント

タイトルとURLをコピーしました