Unity の Addressable アセットシステムのアドレスやラベルの付与を自動化するためのツールです。
アドレスやラベルはGUIツールを使って、ルールベースで簡単に設定できます。
また、リリース前のアセットをビルド対象から外すバージョン管理も備えています。
詳細
Addressable アセットシステムでは、下図のようにアセットを Addressables Groups ウィンドウにドラッグ&ドロップすることでアドレスを登録することができます。
現実的には、全てのアセットをこのように手作業で登録するわけにはいきません。
Smart Addresser はこの作業を自動化するためのツールです。
例えば以下のようなルールを設定することで、簡単に素早くアドレスを付与できます。
- 指定したフォルダ以下の全ての Prefab にアドレスを付与する
- 「Addressables」という名前のフォルダに入れた全てのアセットにアドレスを付与する
- 指定した正規表現にマッチするパスを持つ全てのアセットにアドレスを付与する
ルールは以下のようなGUIツールを用いて自由に設定できます。
また、バージョン管理機能も備えており、ビルド時にバージョンを指定することでリリース前のアセットをビルド対象から外すことができます。
設定したルールを使って実際に割り当てられるアドレスやラベル、バージョンを確認・バリデーションできるツールも用意されています。
また、CLI を用いることでアドレスの付与およびバリデーションの処理を CI/CD のプロセスに組み込むことができます。
- Unity 2020.3以上
- Addressable アセットシステムがインストールされていること
インストールは以下の手順で行います。
- Window > Package Manager を選択
- 「+」ボタン > Add package from git URL を選択
- 以下を入力してインストール
あるいは Packages/manifest.json を開き、dependencies ブロックに以下を追記します。
{
"dependencies": {
"jp.co.cyberagent.smartaddresser": "https://github.com/CyberAgentGameEntertainment/SmartAddresser.git?path=/Assets/SmartAddresser"
}
}
バージョンを指定したい場合には以下のように記述します(バージョンは適宜書き換えてください)。
バージョンを更新するには上述の手順でバージョンを書き換えてください。
バージョンを指定しない場合には、Packages/package-lock.json ファイルを開いて本ライブラリの箇所のハッシュを書き換えることで更新できます。
{
"dependencies": {
"jp.co.cyberagent.smartaddresser": {
"version": "https://github.com/CyberAgentGameEntertainment/SmartAddresser.git?path=/Assets/SmartAddresser",
"depth": 0,
"source": "git",
"dependencies": {},
"hash": "..."
}
}
}
Note
既に Addressable アセットシステムをセットアップ済みの場合にはこの項目をスキップしてください
Smart Addresser を使う前に、Addressable アセットシステムのセットアップが完了している必要があります。
完了していない場合には、以下の手順でセットアップを行います。
- Window > Asset Management > Addressables > Groups を開く
- Addressable の初期化が行われていない旨が表示されたら、指示に従って初期化を行う
- 必要に応じて、Smart Addresser で制御するための Addressable Asset Group を Create > Groups から作成する
次に Smart Addresser のデータを保存するためのアセットを作成する必要があります。
Assets > Create > Smart Addresser > Layout Rule Data からレイアウトデータアセットを作成します。
アドレス付与ルールはこのアセットに保存されます。
このアセットはプロジェクト内に複数作成可能です。
また Editor フォルダ配下の任意の場所に配置可能です。
レイアウトデータアセットをダブルクリックするか Inspector から Open Editor ボタンを押下すると、レイアウトルールエディタが開きます。
レイアウトルールエディタの Addresse Rules タブでは、プロジェクト内の各 Addressable Asset Group にどのアセットを登録し、どんなアドレスを付与するか(アドレスルール)を設定できます。
Groups カラムには現在プロジェクト内に存在する Addressable Asset Group の一覧が表示されます。
Smart Addresser でアドレスなどを指定したい Addressable Asset Group の Control カラムのチェックボックスにチェックを入れます。
次にいずれかの項目を選択し、その Addressable Asset Group に関する設定を右側のパネルで行います。
Asset Groups タブでは対象とするアセットを指定することができます。
例えば「Charactersという名前のフォルダ内の全てのアセット」を対象とするには、下図のように + ボタンを押下して Object Filter を選択し、Object プロパティに Characters フォルダを設定します。
Object Filter 以外のフィルタの詳細は Asset Group の Asset Filter を参照してください。
また、Object Filter は複数指定でき、AND 条件で判定されます。
Add Asset Group ボタンを押下すると Asset Group も追加でき、Asset Group 同士は OR 条件で判定されます。
Address Provider タブでは付与するアドレスを指定できます。
下図のように Source に File Name Without Extensions を指定すると拡張子なしのアセット名がアドレスになります。
各アドレスプロバイダの一覧や説明は Address Provider を参照してください。
Note
ラベルを使用しない場合にはこの項目をスキップしてください
レイアウトルールエディタの Label Rules タブでは、各アセットに Addressable アセットシステムのラベルを設定するためのルール(ラベルルール)を設定できます。
左上の + ボタンを押下することで新しくラベルルールを追加することができます。
追加した項目をクリックするとリネームすることができます。
いずれかの項目を選択すると、右側のパネルからラベルを付与するルールを設定できます。
Asset Groups タブでは対象とするアセットを指定することができます。
使い方は アドレスルールを作成する と同様なのでこちらを参照してください。
Label Provider タブでは付与するラベルを指定できます。
下図では test という名前のラベルを設定しています。
Change Provider ボタンを押下すると他のラベルプロバイダを使用することもできます。 各ラベルプロバイダの一覧や説明は Label Provider を参照してください。
さてこのようにルールベースでアドレスなどを指定すると、以下のような問題が起こる可能性があります。
- 一つのアセットに対して複数のアドレスが指定されている
- 一つのアドレスに対して複数のアセットが指定されている
- 一つのアドレスに対して複数のバージョンが指定されている
このようなルールの設定ミスを検知するためのツールとして、Layout Viewer が用意されています。
Layout Viewer は Window > Smart Addresser > Layout Viewer から開くことができます。
Layout Viewer を開くとバリデーションが行われ、Addressable Group とそれに含まれるアドレスの一覧とバリデーション結果が表示されます。
警告やエラーがある行を選択するとウィンドウの下部に詳細が表示されます。
このツールを使い、警告やエラーがなくなるようにレイアウトルールを調整します。
なお、上記の各問題をエラーとして取り扱うか、警告として取り扱うかは、Project Settings > Smart Addresser > Validation Settings で設定することができます。
レイアウトルールを作成してバリデーションを行ったら、実際に Addressable アセットシステムにそれを適用します。
Layout Rule Editor からは以下の手順で適用することができます。
- 右上のメニューボタンを押下する
- Apply to Addressables を選択する
Project Settings > Smart Addresser の Primary Data に Layout Rule Data を設定すると、アセットがインポートされた際やルールが編集された際に、そのルールが自動的に Addressable アセットシステムに適用されます。
コマンドラインインターフェース(CLI)で適用することもできます。 詳しくは コマンドラインインターフェース (CLI) を参照してください。
例えば Object Filter に設定していたオブジェクトが削除された場合など、設定していたレイアウトルールが破損するケースがあります。
Project Settings > Smart Addresser > Layout Rule Corruption を設定することでレイアウトルールの破損をチェックすることができます。
項目の説明は以下の通りです。
項目名 | 説明 |
---|---|
Throws Exception | レイアウトルールが破損している場合に例外をスローする。適用処理はされない。 |
Log Error | レイアウトルールが破損している場合にエラーログを出力する。適用処理はされる。 |
Ignore | レイアウトルールが破損していても無視して適用処理を行う。 |
Smart Addresser では、各アセットに対してバージョンを付与することができます。
レイアウトルールを Addressable に適用する際にバージョンの範囲を指定することで、特定のアセットだけを Addressable のエントリとして登録することができます。
バージョンの表現方法については Semantic Versioning に従います。 すなわち、以下のようなバージョンを定義することができます。
- 1.2.3
- 2.1.0-preview.7
有効なバージョンの範囲を表現する方法については、Unity の Version Define expressions の仕様に合わせています。
すなわち以下のようにバージョンxの範囲を表現することができます。
- [1.3,3.4.1] は 1.3.0 <= x <= 3.4.1 を示す
- (1.3.0,3.4) は 1.3.0 < x < 3.4.0 を示す
- [1.1,3.4) は 1.1.0 <= x < 3.4.0 を示す
- (0.2.4,5.6.2-preview.2] は 0.2.4 < x <= 5.6.2-preview.2 を示す
- [2.4.5] は x = 2.4.5 を示す
- 2.1.0-preview.7 は x >= 2.1.0-preview.7 を示す
- スペースなしで入力する必要あり
- ワイルドカードは使用不可能
各アセットのバージョンは、レイアウトルールエディタの Version Rules タブから設定できます。
左上の + ボタンを押下することで新しくバージョンルールを追加することができます。
追加した項目をクリックするとリネームすることができます。
いずれかの項目を選択すると、右側のパネルからバージョンを付与するルールを設定できます。
Asset Groups タブでは対象とするアセットを指定することができます。 使い方は アドレスルールを作成する と同様なのでこちらを参照してください。
Version Provider タブでは付与するバージョンを指定できます。 下図では 1.2.0 という名前のバージョンを設定しています。
Change Provider ボタンを押下すると他のバージョンプロバイダを使用することもできます。
各バージョンプロバイダの一覧や説明は Version Provider を参照してください。
バージョンの範囲を指定して適用するには、Layout Rule Editor の Settings タブの Version Expression プロパティに範囲を入力します。
Exclude Unversioned にチェックを入れると、バージョンが割り当てられていないアセットを適用対象外とします。
以下は「1.2.0 以上 3.4.0 未満のバージョンが指定されたアセットおよびバージョンが割り当てられていないアセット」を適用対象としている例です。
Version Expression を設定した後は通常通り適用すると、そのバージョンの範囲内のアセットが Addressable アセットシステムに適用されます。
Smart Addresser のバージョン管理機能は、リリース前のアセットをビルド対象から省くことを想定して作られています。
たとえば、[1.0.0,1.2.0] のように指定することで、1.2.0 より大きいバージョンのアセットをビルド対象から外します。
これを使用する上で、低いバージョンのアセットから高いバージョンのアセットへの参照が存在していないことを注意する必要があります。
このような依存関係があるとバージョン更新時に意図しないアセットまで更新される可能性があるためです。
例えば 1.2.0 のバージョンのアセットAが 1.3.0 のバージョンのアセットBを参照していると、1.2.0 までのバージョンをビルド後に 1.3.0 を含めてビルドした際に、アセットBだけでなくアセットAにまで更新が入ってしまいます。
通常であればこのような依存関係は構築されないと思われますが、注意してください。
上述の通り、有効なバージョンの範囲を表現する方法については、Unity の Version Define expressions の仕様に合わせています。
IVersionExpressionParser
を実装したクラスを作成して Project Settings > Smart Addresser > Version Expression Parser にそのスクリプトをアサインすることで、独自のバージョン範囲表現を使うこともできます。
コマンドラインから Version Expression を設定するにはSmartAddresser.Editor.Core.Tools.CLI.SmartAddresserCLI.SetVersionExpression
を呼びます。
以下はMacでコマンドライン実行を行う例です。
/Applications/Unity/Hub/Editor/2020.3.40f1/Unity.app/Contents/MacOS/Unity -projectPath [Your Project Path Here] -executeMethod SmartAddresser.Editor.Core.Tools.CLI.SmartAddresserCLI.SetVersionExpression
コマンドライン引数は以下の通りです。
引数名 | 説明 |
---|---|
-layoutRuleAssetPath <assetPath> | 適用するレイアウトルールデータのアセットパス。 指定されない場合は最初に見つかったものを使用します。 |
-versionExpression <versionExpression> | 設定する Version Expression。 |
実行が完了すると自動的にUnityを終了し、戻り値として以下の値を返します。
- 実行が成功した場合: 0
- 実行中にエラーが発生した場合: 2
コマンドラインからレイアウトルールの破損を検知するにはSmartAddresser.Editor.Core.Tools.CLI.SmartAddresserCLI.ValidateLayoutRules
を呼びます。
以下はMacでコマンドライン実行を行う例です。
/Applications/Unity/Hub/Editor/2020.3.40f1/Unity.app/Contents/MacOS/Unity -projectPath [Your Project Path Here] -executeMethod SmartAddresser.Editor.Core.Tools.CLI.SmartAddresserCLI.ValidateLayoutRules
コマンドライン引数は以下の通りです。
引数名 | 説明 |
---|---|
-layoutRuleAssetPath <assetPath> | 適用するレイアウトルールデータのアセットパス。 指定されない場合は最初に見つかったものを使用します。 |
-errorLogFilePath <filePath> | バリデーション結果の出力ファイルパス。 デフォルトはLogs/SmartAddresser_LayoutRuleError.json |
実行が完了すると自動的にUnityを終了し、戻り値として以下の値を返します。
- 実行が成功した場合: 0
- レイアウトルールに破損があった場合: 1
- 実行中にエラーが発生した場合: 2
コマンドラインからレイアウトルールを反映するには SmartAddresser.Editor.Core.Tools.CLI.SmartAddresserCLI.ApplyRules
を呼びます。
以下はMacでコマンドライン実行を行う例です。
/Applications/Unity/Hub/Editor/2020.3.40f1/Unity.app/Contents/MacOS/Unity -quit -batchmode -projectPath /Users/s14774/Unity/SmartAddresser_Sample -executeMethod SmartAddresser.Editor.Core.Tools.CLI.SmartAddresserCLI.ApplyRules
コマンドライン引数は以下の通りです。
引数名 | 説明 |
---|---|
-layoutRuleAssetPath <assetPath> | 適用するレイアウトルールデータのアセットパス。 指定されない場合は最初に見つかったものを使用します。 |
-validateLayoutRule | このオプションを有効にした場合、反映する前に破損しているレイアウトルールがないかチェックされます。 |
-validateLayout | このオプションを有効にした場合、反映する前にレイアウトのバリデーションが実行されます。 バリデーションは処理時間のかかるプロセスであるため、レイアウトルールに問題がないことが保証されている場合にはスキップできます。 |
-resultFilePath <filePath> | バリデーション結果の出力ファイルパス。 デフォルトはSmartAddresser/validate_result.json。 |
-failWhenWarning | このオプションを有効にした場合、バリデーションで警告が発生した場合に実行エラーとみなします。 |
実行が完了すると自動的にUnityを終了し、戻り値として以下の値を返します。
- 実行が成功した場合: 0
- バリデーションが失敗した場合: 1
- 実行中にエラーが発生した場合: 2
Smart Addresser の各種操作はスクリプトから行うこともできます。
以下はスクリプトからレイアウトルールデータを操作する例です。
using System.Linq;
using SmartAddresser.Editor.Core.Models.LayoutRules;
using SmartAddresser.Editor.Core.Models.LayoutRules.AddressRules;
using SmartAddresser.Editor.Core.Models.LayoutRules.LabelRules;
using SmartAddresser.Editor.Core.Models.LayoutRules.VersionRules;
using SmartAddresser.Editor.Core.Models.Shared;
using SmartAddresser.Editor.Core.Models.Shared.AssetGroups.AssetFilterImpl;
using UnityEditor;
using UnityEditor.AddressableAssets.Settings;
public static class Example
{
private const string LayoutRuleDataAssetPath = "Assets/LayoutRuleData.asset";
private const string AddressableAssetGroupAssetPath = "Assets/AddressableAssetsData/AssetGroups/ExampleGroup.asset";
[MenuItem("Tools/Smart Addresser/Example/Setup Layout Rule Data")]
public static void SetupLayoutRuleDataProgramatically()
{
// Load LayoutRuleData
var data = AssetDatabase.LoadAssetAtPath<LayoutRuleData>(LayoutRuleDataAssetPath);
// Remove & Add AddressRule
var group = AssetDatabase.LoadAssetAtPath<AddressableAssetGroup>(AddressableAssetGroupAssetPath);
var addressRule = data.LayoutRule.AddressRules.FirstOrDefault(x => x.AddressableGroup == group);
if (addressRule != null)
data.LayoutRule.AddressRules.Remove(addressRule);
addressRule = CreateAddressRule(group);
data.LayoutRule.AddressRules.Add(addressRule);
// Add LabelRule
data.LayoutRule.LabelRules.Add(CreateLabelRule());
// Add VersionRule
data.LayoutRule.VersionRules.Add(CreateVersionRule());
EditorUtility.SetDirty(data);
AssetDatabase.SaveAssets();
}
private static AddressRule CreateAddressRule(AddressableAssetGroup group)
{
// Create new AddressRule.
var addressRule = new AddressRule(group);
// Set the Control property true to activate this rule.
addressRule.Control.Value = true;
// Set the target assets of this rule.
// In this case, all png files are targeted.
var assetGroup = addressRule.AssetGroups[0];
var assetFilter = new ExtensionBasedAssetFilter();
assetFilter.Extension.Value = "png";
assetGroup.Filters.Add(assetFilter);
// Set the address pattern of this rule.
// In this case, set the asset name as the address.
var addressProvider = new AssetPathBasedAddressProvider();
addressProvider.Source = PartialAssetPathType.FileName;
addressRule.AddressProvider.Value = addressProvider;
return addressRule;
}
private static LabelRule CreateLabelRule()
{
var labelRule = new LabelRule();
labelRule.Name.Value = "NormalMap";
// Set the target assets of this rule.
// In this case, all files that contains "_Normal" in the name are targeted.
var assetGroup = labelRule.AssetGroups[0];
var assetFilter = new RegexBasedAssetFilter();
assetFilter.AssetPathRegex.Value = "_Normal";
assetGroup.Filters.Add(assetFilter);
// Set the label provider.
// In this case, set the label "NormalMap".
var labelProvider = new ConstantLabelProvider();
labelProvider.Label = "NormalMap";
labelRule.LabelProvider.Value = labelProvider;
return labelRule;
}
private static VersionRule CreateVersionRule()
{
var versionRule = new VersionRule();
versionRule.Name.Value = "1.0.0";
// Set the target assets of this rule.
// In this case, all files that contains "Ellen" in the name are targeted.
var assetGroup = versionRule.AssetGroups[0];
var assetFilter = new RegexBasedAssetFilter();
assetFilter.AssetPathRegex.Value = "Ellen";
assetGroup.Filters.Add(assetFilter);
// Set the version provider.
// In this case, set the version "1.0.0".
var versionProvider = new ConstantVersionProvider();
versionProvider.Version = "1.0.0";
versionRule.VersionProvider.Value = versionProvider;
return versionRule;
}
}
以下はバージョンを設定し、バリデーションし、Addressable に適用する例です。
using System;
using System.Linq;
using SmartAddresser.Editor.Core.Models.LayoutRules;
using SmartAddresser.Editor.Core.Models.Layouts;
using SmartAddresser.Editor.Core.Models.Services;
using SmartAddresser.Editor.Core.Tools.Shared;
using SmartAddresser.Editor.Foundation.AddressableAdapter;
using SmartAddresser.Editor.Foundation.AssetDatabaseAdapter;
using UnityEditor;
using UnityEditor.AddressableAssets;
public static class Example
{
private static void Apply()
{
var layoutRuleData = LoadLayoutRuleData();
var layoutRule = layoutRuleData.LayoutRule;
var versionExpressionParser = new VersionExpressionParserRepository().Load();
var assetDatabaseAdapter = new AssetDatabaseAdapter();
var addressableSettings = AddressableAssetSettingsDefaultObject.Settings;
var addressableSettingsAdapter = new AddressableAssetSettingsAdapter(addressableSettings);
// Set Version Expression
{
// Set the version expression.
layoutRule.Settings.VersionExpression.Value = "1.3.0";
// Save the LayoutRuleData asset.
EditorUtility.SetDirty(layoutRuleData);
AssetDatabase.SaveAssets();
}
// Validation
{
// Build and validate the Layout.
var buildLayoutService = new BuildLayoutService(assetDatabaseAdapter);
var layout = buildLayoutService.Execute(layoutRule);
layout.Validate(true);
// Export the result of the validation.
var validateResultExportService = new ValidateResultExportService(layout);
validateResultExportService.Run("Smart Addresser/validate-result.json");
// Throw exception if the validation failed.
if (layout.ErrorType == LayoutErrorType.Error || layout.ErrorType == LayoutErrorType.Warning)
throw new Exception($"Validation failed: {layout.ErrorType}");
}
// Apply
{
// Apply the layout rules to the addressable asset system.
var applyService = new ApplyLayoutRuleService(layoutRule, versionExpressionParser,
addressableSettingsAdapter, assetDatabaseAdapter);
applyService.ApplyAll();
}
}
private static LayoutRuleData LoadLayoutRuleData(string assetPath = null)
{
if (!string.IsNullOrEmpty(assetPath))
return AssetDatabase.LoadAssetAtPath<LayoutRuleData>(assetPath);
var guid = AssetDatabase.FindAssets($"t: {nameof(LayoutRuleData)}").FirstOrDefault();
if (string.IsNullOrEmpty(guid))
throw new InvalidOperationException("There is no LayoutRuleData in the project.");
assetPath = AssetDatabase.GUIDToAssetPath(guid);
return AssetDatabase.LoadAssetAtPath<LayoutRuleData>(assetPath);
}
}
名前 | 概要と各プロパティの説明 |
---|---|
Object Filter | アセットを直接指定してフィルタリングします。 使用例: Characters フォルダ以下のアセットだけをレギュレーションの対象とする。 Folder Targeting Mode フォルダを指定した時の扱いを指定します。 ・Included Assets (Exclude Folders): フォルダ内のアセットのみ対象とする ・Self: フォルダ自身のみを対象とする ・Both: フォルダと中のアセットの両方を対象とする Object 対象のアセット。 フォルダを指定した場合にはそのフォルダ以下の全てのアセットが対象となります。 右側のトグルを切り替えることで複数指定することができます。 |
Type Filter | アセットの型を指定してフィルタリングします。 使用例: Texture2D 型のアセットだけをレギュレーションの対象とする。 Match With Derived Type チェックをつけると派生型も対象とします。 Type 対象の型。 右側のトグルを切り替えることで複数指定することもできます。 |
Asset Path Filter | アセットパスを指定してフィルタリングします。 使用例1: Assets/Sample[任意の3文字]/ というフォルダに含まれるアセットを対象とする 使用例2: ファイル名に「Dummy」を含むものを対象から除外する Match With Folders フォルダを対象とするか。 Asset Path (Regex) 対象のアセットパス。 これにパスが部分一致するアセットが対象となります。 正規表現を使用することもできます。 右側のトグルを切り替えることで複数指定することもできます。 Condition Asset Pathを複数指定する場合の取り扱い方を指定できます。 ・Contains Matched: いずれかのアセットパスがマッチしたら対象とする ・Match All: 全てのアセットパスがマッチしたら対象とする ・Contains Unmatched: マッチしないアセットパスが一つでもあれば対象とする ・Not Match All: 全てのアセットパスにマッチしなかったら対象とする |
Extension Filter | アセットの拡張子を指定してフィルタリングします。 使用例: png あるいは jpg ファイルだけをレギュレーションの対象にする Extension 対象の拡張子。 右側のトグルを切り替えることで複数指定することもできます。 |
Dependent Object Filter | 指定したアセットから参照されているアセットをフィルタリングします。 使用例: あるPrefabが参照するテクスチャを全て対象とする。 Only Direct Dependencies 直接参照しているアセットのみを対象とします。 Object 参照元のアセット。 |
Find Assets Filter | AssetDatabase.FindAssets()を用いてアセットをフィルタリングします。 Filter AssetDatabase.Find()に渡すフィルタ文字列。 Target Folders 検索対象とするフォルダ。 指定しない場合全てのフォルダが対象となります。 |
名前 | 概要と各プロパティの説明 |
---|---|
Asset Path Based Address Provider | 対象アセットのアセットパスを元にアドレスを付与します。 Source 以下のパターンからアドレスを指定します。 ・File Name: 拡張子付きファイル名 ・File Name Without Extensions: 拡張子なしアセット名 ・Asset Path: アセットパス Replace With Regex チェックをつけると、Pattern を元に正規表現を作成し、Source を Replacement で Regex.Replace したものをアドレスとします。 |
名前 | 概要と各プロパティの説明 |
---|---|
Constant Label Provider | 固定値でラベルを付与します。 Label 付与するラベルの名前。 |
Asset Path Based Label Provider | 対象アセットのアセットパスを元にラベルを付与します。 Source 以下のパターンからラベルを指定します。 ・File Name: 拡張子付きファイル名 ・File Name Without Extensions: 拡張子なしアセット名 ・Asset Path: アセットパス Replace With Regex チェックをつけると、Pattern を元に正規表現を作成し、Source を Replacement で Regex.Replace したものをラベルとします。 |
名前 | 概要と各プロパティの説明 |
---|---|
Constant Version Provider | 固定値でバージョンを付与します。 Label 付与するバージョンの名前。 |
Asset Path Based Version Provider | 対象アセットのアセットパスを元にバージョンを付与します。 Source 以下のパターンからバージョンを指定します。 ・File Name: 拡張子付きファイル名 ・File Name Without Extensions: 拡張子なしアセット名 ・Asset Path: アセットパス Replace With Regex チェックをつけると、Pattern を元に正規表現を作成し、Source を Replacement で Regex.Replace したものをバージョンとします。 |
独自のアセットフィルタを作成するにはまず AssetFilterAsset を継承したクラスを作成します。
using System;
using SmartAddresser.Editor.Core.Models.Shared.AssetGroups.AssetFilterImpl;
public sealed class ExampleAssetFilter : AssetFilterAsset
{
public override void SetupForMatching()
{
// IsMatchの前に呼ばれる処理
// IsMatchがアセットごとに呼ばれるのに対して、この処理は一度だけ呼ばれる
// したがって重い処理はここで行う
}
public override bool IsMatch(string assetPath, Type assetType, bool isFolder)
{
// 引数に与えられたアセットがこのフィルタにマッチしていたらtrueを返す
}
public override string GetDescription()
{
// このフィルタの状態を文字列で返す(エディタ用)
}
}
次にこのクラスの ScriptableObject アセットを作成します(AssetFilterAsset は ScriptableObject を継承しています)。
最後に Layout Rule Editor の Asset Group に Example Asset Filter を追加し、Asset Filter プロパティに先ほど作った ScriptableObject をアサインすれば完了です。
独自のプロバイダを作成するにはまず、AddressProviderAsset / LabelProviderAsset / VersionProviderAsset のいずれかを継承したクラスを実装します。
using System;
using SmartAddresser.Editor.Core.Models.LayoutRules.AddressRules;
using UnityEngine;
public sealed class ExampleAddressProvider : AddressProviderAsset
{
public override void Setup()
{
// Provideの前に呼ばれる処理
// Provideがアセットごとに呼ばれるのに対して、この処理は一度だけ呼ばれる
// したがって重い処理はここで行う
}
public override string Provide(string assetPath, Type assetType, bool isFolder)
{
// 引数に与えられたアセットに対応するアドレスを返す
// 該当するアドレスが無い場合にはnullを返す
}
public override string GetDescription()
{
// このフィルタの状態を文字列で返す(エディタ用)
}
}
次にこのクラスの ScriptableObject アセットを作成します(各ProviderAsset は ScriptableObject を継承しています)。
最後に Layout Rule Editor の 各 Provider の Change Provider ボタンを押下してから Custom Provider を選択し、Address Provider プロパティに先ほど作った ScriptableObject をアサインすれば完了です。
本ソフトウェアはMITライセンスで公開しています。
ライセンスの範囲内で自由に使っていただけますが、使用の際は以下の著作権表示とライセンス表示が必須となります。
また、本ドキュメントの目次は以下のソフトウェアを使用して作成されています。
toc-generatorのライセンスの詳細は Third Party Notices.md を参照してください。