【Unity】grepを利用してAssetの参照先やスクリプトのアタッチ先を調べる【TresGrep】
はじめに
grepとは、unixOS等で扱えるコマンドの一つで、複数のファイルから指定した文字列を検索することができます。
「Global Regular Expression Print」の略称であり、正規表現(Regular Expression)を使って条件を指定できるのが特徴です。
この記事では、Unityで開発を行う上でgrepを役立ててみたいと思います。
1.特定の単語を含むスクリプトを全検索したい
2.特定のファイルが使用されているアセットを検索したい
3.特定のスクリプトがアタッチされているPrefabを検索したい
TresGrep
なお、今回はTresGrepという外部ツールを使用します。
検索が高速であることに加え、条件の設定や結果の一覧性に優れています。
ツールに沿って説明を行いますが、重要なのは検索で指定する条件になりますので、ツールを使わないという方でも問題ないかと思います。
1.特定の単語を含むスクリプトを全検索したい
以下の3つのスクリプトがあったとします。
これらには、文字列が手打ちで定義されています。
public class Hoge : MonoBehaviour
{
private string targetText = "Pikachu";
}
public class Fuga : MonoBehaviour
{
private string dummyValue = "Eevee";
}
public class Piyo : MonoBehaviour
{
private string dummyValue = "Eevee";
private void Start()
{
string targetValue = "Pikachu";
}
}
このようなケースにおいて、「Pikachu」という文字列を含むスクリプトを検索してみましょう。
それでは、実際にTresGrepを利用して検索していきます。
まず、検索対象となるフォルダのパスを指定します。基本的には、プロジェクトファイル内のAssetsを指定する形で問題ありません。
そして、検索する文字列の形式を指定します。デフォルトは日本語になっていますが、Unityで扱う上では「欧文(西欧)」を指定します。
続いて、「ファイル名絞り込み」の入力欄に「*.cs」と入力します。
この設定を行うことで、検索対象を絞り込むことができます。
仮に画像ファイル名に「Pikachu」と設定されていても引っかからなくなります。
最後に、検索したい文字列を打ち込めば自動で全検索を行ってくれます。
目的通り、Hoge.cs と Piyo.cs が表示されているのが確認できました。
結果が存在すればTresGrep上で即座にファイル名、ディレクトリ、該当コードを確認することができるのでとても便利です。
2.特定のファイルが使用されているアセットを検索したい
次のケースでは、Spriteファイル、Prefabが使用されているアセットを探してみます。
Spriteを設定されたPrefab、ScriptableObjectを用意しました。
この設定されている"Meowth"というファイルを探します。
TresGrepに移る前に、一つ注意点です。
今回のケースでは、ファイル名である"Meowth"を検索しても目的のファイルはヒットしません。
今回検索する文字列は、SpriteファイルのGUIDです。
GUIDを確認するには、metaファイルを開いてください。
それでは、TresGrepに移ります。
検索対象のフォルダには、Assetsフォルダを指定します。
そして、文字列には上記で調べたGUIDを入力、「ファイル名絞り込み」には".prefab"、もしくは".asset"を入れます。
".prefab"を入力すると"SpritePrefab.prefab"。
".asset"を入力すると"SpriteSO.asset"を得ることができます。
Prefabファイルやアニメーションファイルに関しても同様の手順で使用先を調べることができます。
3.特定のスクリプトがアタッチされているPrefabを検索したい
最後に、作成したcsファイルが使用されているPrefabファイルを探します。
手順はこれまで同様です。
探したいスクリプトのguidを調べ、TresGrepを用いて検索します。
指定する拡張子は、Prefabファイルなら".prefab"、シーンなら".unity"です。
最後に
grepは使い方を覚えておくと、Unityに限らずいろいろな場面で役に立ちます。
正直なところ、目的のアセットを探すためのツール等は存在していますが、インストールしたり手順が複雑だったりという場合もあるので自分はgrepをよく使っています。
Discussion