Mac
Unity
UNIXコマンド

[Unity / Mac] テクスチャなどのリソースファイルがどのアセットで参照されているかを調べる方法

Unityでテクスチャなどのリソースを整理する時、
「あれ、このリソースはどこで使っているんだっけ?」という場面になったことがありませんか?

リソースファイルを参照しているアセットを探す方法として、ReferenceViewerなどのUnityのEditor拡張機能を使う方法がありますが、Unityのアセットファイルのフォーマットがテキスト形式であれば、リソースファイルに割り当てられているGUIDで検索することができます。

それでは、Unixコマンドを使って任意のリソースファイルがどこで参照されているかどうかを調べる方法を紹介します。

環境

  • macOS
  • Unity

UnityのProject Settings > Editor Settingsにて、Asset Serialization及びVersion Controlの設定が以下のようになっている必要があります。

設定 Mode選択
Asset Serialization Force Text
Version Control Visible Meta Files

リソースファイルの参照を調べる

Unityのディレクトリ上に移動します。

まず、grepコマンドを使って、調べたいリソースファイルのmetaファイルからGUIDを取得します。(サンプルコードでは、「Legacy_Image.png」に割り当てられているGUIDを取得します。)

metaファイル内でリソースファイルを識別するGUIDは、

  guild: 62c9d723197f473dac76c4454a8a964f

のように表されます。

# Unityのプロジェクトのディレクトリ内

$ grep -E 'guid:\s([0-9a-f]*)' ./Assets/Resources/Texture/Legacy_Image.png.meta

次にfindコマンドで、./Assets以下のファイル名を取得します。
さらにgrepコマンドを使って、先ほど取得したリソースファイルのGUID情報を指定し、それを参照しているアセットファイル名を表示します。

# Unityのプロジェクトのディレクトリ内

$ find ./Assets -type f -print0 | xargs -0 grep -wl 'guid:\s${GUID}'

リソースファイル名を引数にとって、参照しているアセットファイル名を出力するシェルスクリプトを作成するのも手です。

#!/bin/bash

# resource_finder.sh

GUID=grep -E 'guid:\s([0-9a-f]*)' $1.meta | sed 's/guid: //g'
find ./Assets -type f -print0 | xargs -0 grep -wl 'guid:\s${GUID}'
$ bash resource_finder.sh ./Assets/Resources/Texture/Legacy_Image.png