テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】AssetGraphTool、ノーコーディングで 「指定フォルダにインポートしたアセットの設定を、指定した内容に自動更新する」 機能を作る

f:id:tsubaki_t1:20180111234536g:plain

 AssetGraphToolは大量のアセット群を制御するのに向いているエディター拡張です。ノードベースで編集が出来るので、スクリプトを触らない人にも使いやすくなっています。

今回はAssetGraphToolを使用して設定の変更を自動化します。
具体的には、特定のフォルダのテクスチャやPrefabの値を、設定した項目に自動的に変更したりする方法の紹介です。

 

この機能を使用すると上のGifアニメのように、スプライトのスライスや設定変更等も、アセット毎に行わずとも、指定したフォルダにインポートした瞬間にスライスされている!みたいな事ができます。

 

目次

 

大量のアセットに対してGUIの操作は面倒くさい?

Unityは殆どのアセットをGUIで操作する事ができます。
ただアセットの量が5~10なら兎も角、100・1000のような量になってきたら話は変わってきます。その量のアセットをGUIで制御する場合にはケアレスミスが怖くなります。

f:id:tsubaki_t1:20180111214432j:plain

 

AssetGraphToolで一括操作を行う

AssetGraphToolは大量のアセットを制御するのに向いています。

使い方は殆どをノードベースで制御できる他、ノード部分を自分で作成したりも出来ます。

基本的には以下の3つの制御を管理するノードがあるので、それを組み合わせてアセットの制御を表現します。

  • 検索
  • アセットの分類分け・まとめる
  • 変更・出力

f:id:tsubaki_t1:20180111215021p:plain

 

AssetGraphToolを実際に使ってみる

 早速使ってみます。
今回は特定フォルダのテクスチャを一括変更してみます。

今回行う作業の仕様はこんな感じです。

  • Assets/Sample以下のテクスチャを一括変更する。
  • テクスチャ名によって適応する設定は異なる
  • フォルダにインポートしたら即座に反映したい

 

まずはテクスチャを一括変更だけしてみる

まずはテクスチャを一括変更する項目だけをやります。

作るノードはこんな感じです。

f:id:tsubaki_t1:20180111220617j:plain

f:id:tsubaki_t1:20180111220637g:plain

このノードを作ったら、右上のBuildボタンを押すとノード内の処理が実行され、テクスチャの設定が更新されます。

f:id:tsubaki_t1:20180111222001j:plain

 

手順を少し詳しく説明します。

 

操作するフォルダの選択

まず最初にアセット制御を行うフォルダを選択します。

これはドラッグ&ドロップでグラフにフォルダを登録すればOKです。もし別手順でノードを作りたい場合は、右クリック→LoadAsset系です。

この手の機能は、灰色のノードで表現されます。

f:id:tsubaki_t1:20180111220855j:plain

 

フォルダからテクスチャ一覧を抽出

次にフォルダに格納されているアセット一覧からテクスチャだけを抽出します。

抽出する場合はSplit系のノードやGroup系のノードを使用します。

f:id:tsubaki_t1:20180111221133j:plain

Split系で、フォルダ内のアセット群からテクスチャのみを抽出します。
次に使用するOverrideImportSettingsは、単一種類のアセットしか受け付けません。Splitを使用したのはそのためです。

f:id:tsubaki_t1:20180111221715j:plain

 

テクスチャの設定を変更

最後にテクスチャの設定変更を行います。

設定の変更はModifier系ノードです。Modifier系では、インポート設定の上書きや設定の更新ができます。

f:id:tsubaki_t1:20180111221917j:plain

Override Import Settingsにテクスチャ一覧を渡すと、Inspectorでテクスチャの設定が表示されるので、これを好きな設定に上書きすればOKです。

f:id:tsubaki_t1:20180111222418j:plain

もし設定のオリジナルが存在するなら、Use Costom Setting Assetを使用します。これでオリジナルのインポート設定を他の全てのテクスチャに反映できます。

f:id:tsubaki_t1:20180111223022j:plain

 

ビルドが行えない場合

ビルドを行うボタンが無効になって押せない場合、何らかのエラーがあります。

左上の赤!ボタンを押すと、現在エラーを起こしてるノード一覧が表示され、エラーの原因が表示されます。

f:id:tsubaki_t1:20180111231022j:plain

 

テクスチャ名によってインポートする設定を変える

次にインポートするテクスチャによって設定を変更する方法についてです。

これはLoad From *** で取得したアセット一覧を、名前やラベル等で分割したりグループ化する事で実現します。

f:id:tsubaki_t1:20180111224756j:plain

Splitの項目を増やして名前で分割します。
Filterは特に拡張しなければ名前で抽出が出来るので、名前から抽出します。

f:id:tsubaki_t1:20180111225003j:plain

項目を増やすとSplit by filterの出力スロット(右側)が増えるので、別のOverride Import Settingsを設定すればOKです。

 

なお、どんなアセットが抽出されているかは、ノード間の数字を選択すると確認できます。下の図の場合、questという名前のファイルは3つのみですので、ノード間の数字は3です。

f:id:tsubaki_t1:20180111225307j:plain

今回はquestと名前のつくテクスチャは通常のテクスチャとして、sampleと名前のつくテクスチャはSpriteとして生成するようにしています。

f:id:tsubaki_t1:20180111230418j:plain

 

 

設定の変更を自動化する

 最後に、指定したフォルダ以下にアセットを配置したらAssetGraphToolで定義した設定変更を即座に実行するようにします。

 

フォルダを監視して変化があれば反応する

この設定は二つの項目を変更します。
一つはUse As Postprocesser、もう一つはRespond to asset changeです。

正しくはRespound to asset changeの項目が有効な場合、Load From *** 系のRespound to asset changeの項目をチェックし、設定を反映させてくれます。

f:id:tsubaki_t1:20180111225549j:plain

Respound to asset changeが有効になっているフォルダに対してアセットを追加してみると、AssetGraphToolに設定したノードの通りにアセットの設定を更新してくれました。

f:id:tsubaki_t1:20180111230141g:plain

なお、MacでAssetGraphToolを入れたときにエディターがハングする事があったらコレのせいっぽいです。一応は修正済みらしいですが…

 

どんな処理が行われたのかを確認する

AssetGraphToolで行った処理の一覧は、AssetGraphのLogWindowで確認できます。これで特定のファイルに想定外の設定が入っている場合、設定したノードを見つけ出して修正したりします。

f:id:tsubaki_t1:20180111231253g:plain

 

感想

結構便利です。

自分のように1記事かくのに2~3プロジェクト作ってるような人にとってはパッケージのインポートが面倒くさいので、はやくパッケージマネージャーから取得して欲しい所です。

 

Prefabのセットアップ自動化とかはまた別に書きます(多分。

 

関連

資料

リポジトリ

Unity-Technologies / AssetBundleGraphTool / source / — Bitbucket

マニュアル

docs.google.com

www.slideshare.net

関連情報

Unity 2018.1のPreset

AssetGraphToolと異なりオブジェクトに対しても効力を発揮します。

tsubakit1.hateblo.jp

シーンの不要な物を削る系を一括処理する的な用途なら、コチラのほうが個人的にはオススメ。シーンファイルを変更すること無くビルドするシーンの内容を書き換えられます。

tsubakit1.hateblo.jp

こういった自動化型で紹介しときたい、最近できるようになったこと

tsubakit1.hateblo.jp