【Unity】AssetGraphTool、ノーコーディングで 「指定フォルダにインポートしたアセットの設定を、指定した内容に自動更新する」 機能を作る
AssetGraphToolは大量のアセット群を制御するのに向いているエディター拡張です。ノードベースで編集が出来るので、スクリプトを触らない人にも使いやすくなっています。
今回はAssetGraphToolを使用して設定の変更を自動化します。
具体的には、特定のフォルダのテクスチャやPrefabの値を、設定した項目に自動的に変更したりする方法の紹介です。
この機能を使用すると上のGifアニメのように、スプライトのスライスや設定変更等も、アセット毎に行わずとも、指定したフォルダにインポートした瞬間にスライスされている!みたいな事ができます。
目次
大量のアセットに対してGUIの操作は面倒くさい?
Unityは殆どのアセットをGUIで操作する事ができます。
ただアセットの量が5~10なら兎も角、100・1000のような量になってきたら話は変わってきます。その量のアセットをGUIで制御する場合にはケアレスミスが怖くなります。
AssetGraphToolで一括操作を行う
AssetGraphToolは大量のアセットを制御するのに向いています。
使い方は殆どをノードベースで制御できる他、ノード部分を自分で作成したりも出来ます。
基本的には以下の3つの制御を管理するノードがあるので、それを組み合わせてアセットの制御を表現します。
- 検索
- アセットの分類分け・まとめる
- 変更・出力
AssetGraphToolを実際に使ってみる
早速使ってみます。
今回は特定フォルダのテクスチャを一括変更してみます。
今回行う作業の仕様はこんな感じです。
- Assets/Sample以下のテクスチャを一括変更する。
- テクスチャ名によって適応する設定は異なる
- フォルダにインポートしたら即座に反映したい
まずはテクスチャを一括変更だけしてみる
まずはテクスチャを一括変更する項目だけをやります。
作るノードはこんな感じです。
このノードを作ったら、右上のBuildボタンを押すとノード内の処理が実行され、テクスチャの設定が更新されます。
手順を少し詳しく説明します。
操作するフォルダの選択
まず最初にアセット制御を行うフォルダを選択します。
これはドラッグ&ドロップでグラフにフォルダを登録すればOKです。もし別手順でノードを作りたい場合は、右クリック→LoadAsset系です。
この手の機能は、灰色のノードで表現されます。
フォルダからテクスチャ一覧を抽出
次にフォルダに格納されているアセット一覧からテクスチャだけを抽出します。
抽出する場合はSplit系のノードやGroup系のノードを使用します。
Split系で、フォルダ内のアセット群からテクスチャのみを抽出します。
次に使用するOverrideImportSettingsは、単一種類のアセットしか受け付けません。Splitを使用したのはそのためです。
テクスチャの設定を変更
最後にテクスチャの設定変更を行います。
設定の変更はModifier系ノードです。Modifier系では、インポート設定の上書きや設定の更新ができます。
Override Import Settingsにテクスチャ一覧を渡すと、Inspectorでテクスチャの設定が表示されるので、これを好きな設定に上書きすればOKです。
もし設定のオリジナルが存在するなら、Use Costom Setting Assetを使用します。これでオリジナルのインポート設定を他の全てのテクスチャに反映できます。
ビルドが行えない場合
ビルドを行うボタンが無効になって押せない場合、何らかのエラーがあります。
左上の赤!ボタンを押すと、現在エラーを起こしてるノード一覧が表示され、エラーの原因が表示されます。
テクスチャ名によってインポートする設定を変える
次にインポートするテクスチャによって設定を変更する方法についてです。
これはLoad From *** で取得したアセット一覧を、名前やラベル等で分割したりグループ化する事で実現します。
Splitの項目を増やして名前で分割します。
Filterは特に拡張しなければ名前で抽出が出来るので、名前から抽出します。
項目を増やすとSplit by filterの出力スロット(右側)が増えるので、別のOverride Import Settingsを設定すればOKです。
なお、どんなアセットが抽出されているかは、ノード間の数字を選択すると確認できます。下の図の場合、questという名前のファイルは3つのみですので、ノード間の数字は3です。
今回はquestと名前のつくテクスチャは通常のテクスチャとして、sampleと名前のつくテクスチャはSpriteとして生成するようにしています。
設定の変更を自動化する
最後に、指定したフォルダ以下にアセットを配置したらAssetGraphToolで定義した設定変更を即座に実行するようにします。
フォルダを監視して変化があれば反応する
この設定は二つの項目を変更します。
一つはUse As Postprocesser、もう一つはRespond to asset changeです。
正しくはRespound to asset changeの項目が有効な場合、Load From *** 系のRespound to asset changeの項目をチェックし、設定を反映させてくれます。
Respound to asset changeが有効になっているフォルダに対してアセットを追加してみると、AssetGraphToolに設定したノードの通りにアセットの設定を更新してくれました。
なお、MacでAssetGraphToolを入れたときにエディターがハングする事があったらコレのせいっぽいです。一応は修正済みらしいですが…
どんな処理が行われたのかを確認する
AssetGraphToolで行った処理の一覧は、AssetGraphのLogWindowで確認できます。これで特定のファイルに想定外の設定が入っている場合、設定したノードを見つけ出して修正したりします。
感想
結構便利です。
自分のように1記事かくのに2~3プロジェクト作ってるような人にとってはパッケージのインポートが面倒くさいので、はやくパッケージマネージャーから取得して欲しい所です。
Prefabのセットアップ自動化とかはまた別に書きます(多分。
関連
資料
Unity-Technologies / AssetBundleGraphTool / source / — Bitbucket
マニュアル
関連情報
Unity 2018.1のPreset
AssetGraphToolと異なりオブジェクトに対しても効力を発揮します。
シーンの不要な物を削る系を一括処理する的な用途なら、コチラのほうが個人的にはオススメ。シーンファイルを変更すること無くビルドするシーンの内容を書き換えられます。
こういった自動化型で紹介しときたい、最近できるようになったこと