LoginSignup
4
1

More than 3 years have passed since last update.

【Unity】Materialが参照している全オブジェクトのパスを取得する方法

Posted at

エンジニア・非エンジニア問わずアセットを納品する場合、そのアセットに対してバリデーションをかけた方がプロダクトの安全性は向上します。

UnityEditorを通じてアセットを作成する場合、AssetDatabaseを通して様々なデータを取得できるため、バリデータを作成するのはとても簡単です。

【Unity】効率よくアセットバリデーションを作成するためのTestRunnerの活用法 - Qiita
以前TestRunnerを使ってサクッとバリデーターを作成した記事を執筆しました。

今回はタイトルの通り任意のMaterialが参照する全てのオブジェクトのパスを取得する必要が出てきたので、その備忘録を残します。

GetDependenciesメソッドを使用

結論から書くとGetDependenciesメソッドを使いました。

// Materialを指定
var materialPath = AssetDatabase.GetAssetPath(material);

// 指定したMaterialに紐づくオブジェクトのパスの配列を取得
var referencePaths = AssetDatabase.GetDependencies(materialPath);

上記のようなソースコードで指定したMaterialが参照するテクスチャ、シェーダ等のパスが取得できます。

取得したパスを何に使うのか?

今回取得したかった理由は、アプリに含まれるマテリアルが参照するオブジェクトがAssetBundleとしてビルドされるオブジェクトかどうかをチェックするためでした。
※間違えてAssetBundleのアセットをアプリ内で参照しちゃっていて、実機で実行するとピンク色になるアレです

この情報を元にバリデーターを作成していくという流れになります。

環境

  • Unity 2019.4.11.f1
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1