Unity Addressable Importerを使ってAddressableアセットシステムのアドレス設定を自動化する方法です。
Unity2019.3.5
はじめに
Addressableアセットシステムを使用すると一意で任意のアドレスによりアセットを管理できます。
これは便利なのですが、各アセットにアドレスを割り振る必要が出てきます。
これは人間のやる作業ではないのでAssetPostprocessorやらで自動化することになりますが、
アドレスを自動で割り振るための便利なOSSであるUnity Addressable Importerを発見したので紹介します。
これをつかうと下図のような設定ファイルに定義したルールに基づいて、
アドレスやグループ、ラベルの設定を自動化することができます。
なおAddressableについてはセットアップが完了している前提で説明を進めます。
Addressableの概念やセットアップ方法については必要に応じて以下の記事を参照してください。
インストールとセットアップ
インストールとセットアップは以下の手順で行います。
インストール
Unity Addressable Importerをインストールするにはmanifest.jsonのDependenciesにリポジトリ情報を追加します。
{ "dependencies": { "com.littlebigfun.addressable-importer": "https://github.com/favoyang/unity-addressable-importer.git" } }
上記を追加してからUnityを立ち上げることでインストールが行われます。
ちなみに初回のインストール時に自動的にインストールしたバージョンのコミット情報がmanifest.jsonに書き込まれます。
"lock": { "com.littlebigfun.addressable-importer": { "revision": "HEAD", "hash": "25821426686726730e723abe617301c23ea29e84" } }
アップデートをしたい場合にはここを書き換えるか、もしくはこの記述を削除してインストールしなおせばOKです。
セットアップ
インストールが完了したら、次にセットアップを行います。
まずAssets > Create > Addressables > Import Settingsを選択します。
するとAddressableImportSettingsというScriptableObjectが生成されるので、
これをAssets > AddressableAssetsData配下に配置します。
ルールを決める
前節で作成したAddressableImportSettingsのInspectorを見ると下図のように表示されることが確認できます(RulesのSizeは1にしています)。
以下、このScriptableObjectを編集することでアドレスの設定ルールを決めていきます。
対象アセットを決める
まず対象となるアセットを決めます。 アセットはRuleのPathにアセットパスを入力することで指定します。
ここでMatch TypeをWildcardにすると*
で任意の複数の文字を、?
で任意の1文字を指定できます。
つまり例えば以下のような指定が可能になります。
- Asset/Prefabs/Character_??/*.prefab
またMatch TypeをRegexにすると正規表現を使ってパスを指定できます。
つまり例えば以下のような指定が可能になります。
- Assets/Prefabs/Character_[0-9]{2}/.*.prefab
実際にはこのようにワイルドカードや正規表現を用いてRuleを作っていくケースが多くなると思います。
グループを設定する
次にアセットが所属するグループを決めます。
グループを設定するには、Group Nameにグループ名を入力するだけです。
ちなみに空欄にした場合にはデフォルトのグループに追加されます。
グループ名を${PATH[0]}
のように指定すると、アセットパスの一部をグループ名として使用できます。
例えば以下のように設定した場合にはCharacter_xx
というフォルダ名がグループ名になります。
ちなみにインデックスに負の値を指定すると「末端からルートに向かって何番目のフォルダか」を指定できるので、以下の設定でも上記と同じ結果が得られます。
さらにMatch TypeをRegexにしている場合、正規表現の名前付きグループを使ってグループ名を指定することもできます。
名前付きグループは(?<name>)
のように指定します(詳しくはこちらのドキュメントを参照)。
ここで、Allow Group Creationにチェックを入れている場合には、指定したグループがなかった時に新しくグループが作られます。
また、Remove Empty Groupsにチェックを入れると所属するアセットが無いグループが削除されます。
さらにGroup TemplateにAddressableAssetGroupTemplateを設定するとグループ生成時にこのテンプレートに基づいてグループの設定が行われます。
またGroup Template Application ModeをAlways Overwrite Group Settingsにするとグループ新規生成時以外(更新時)にもこのテンプレートの設定が適用されます。
ラベルを設定する
さて次にラベルを設定します。
ラベルの設定方法はシンプルで、Label Refsに付けたいラベルを指定するだけです。
このとき、Label ModeがAddだと今設定されているラベルに追加され、Replaceだと今設定されているラベルが削除されて置き換えられます。
アドレスを設定する
さてこのようにして選択されたアセットにはアドレスが設定されます。
原則として、アドレスにはアセットパスがそのまま設定されます。
大体のケースではこれで問題ないのではないかと思いますが、下記のようにアドレスに変更を加えることもできます。
Address Simplifiedにチェックを入れた場合、拡張子なしのファイル名がアドレスとなります。
またAddress Simplifiedのチェックを外し、かつMatch TypeをRegexにしている場合にはAddress Replacementが設定できるようになります。
例えば以下のように設定すると、Prefabs_Character_01
のようなアドレスが設定されます。
ルールの適用タイミングについて
このようにして作られたルールはアセットのインポートや移動のタイミングで適用されます。
もしインポート後に適用したい場合にはフォルダを右クリックしてAddressablesImporter: Check Folder(s)
を選択します。
Reimportしてもいいのですが、こっちの方が無駄な処理が走らない分高速です。