UI Catalog
UI CatalogはVisualTreeAsset、およびStyleSheetのロード方法を集約したScriptableObjectです。Assets/Resources/UICatalog.assetに自動で生成されます。
Viewクラス、またはStyleクラスからUIアセットの読み込みを行うときに利用され、UI Catalog に登録されている内容からロード方法とUI Loaderの決定を行います。UI Loaderはロードの実行を行う概念です。
ロード方法はHaikaraUI Attributeの AssetReferenceModeで決定され、UICatalog上にUIアセットが分類された状態で登録されます。
分類されたアセットはそれぞれUIAssetInfo<T>というクラスとして、uxmlAssetsまたはstyleAssetsに保存されます。
Automated Generating
UI CatalogはDidReloadScriptsのタイミングで Assets/Resources/UICatalog.assetに生成されます。
このパスは固定です。
Manual Generate UI Catalog
自動生成の他に、UI Catalogの生成を手動で実行することも可能です。
メニューバーを Haikara > Regenerate UI Catalog の順で選択することで生成処理が実行されます。
UIAssetInfo<T>
UIAssetInfo<T>には次の種類が存在します。
UIAssetInfo<T>の種類 | AsetReferenceMode | IUILoaderの種類 |
|---|---|---|
ResourceUIInfo<T> | Resource | ResourceUILoader |
AssetPathUIInfo<T> | AssetPath | AssetPathUILoader |
CustomUIInfo<T> | Custom | CustomUILoader |
ResourceUIInfo<T>
[HaikaraUI]で指定されたAssetReferenceModeがResourceのとき、またはデフォルトのとき、UIアセットの情報は ResourceUIInfo<T>として登録されます。
UIアセットのGuidとアセットの実体が保存されており、読み込み時には直接それが渡されます。ResourceUIInfo<T>が使われる場合は、ビルドの中に直接アセットが含まれることに注意してください。
AssetPathUIInfo<T>
AssetReferenceModeがAssetPathのとき、UIアセットの情報は AssetPathUIInfo<T>として登録されます。
UIアセットのGuidと、UnityEditor上でのアセットのパスが保存されています。
このUIAssetInfo<T>はEditorOnlyです
CustomUIInfo<T>
AssetReferenceModeがCustomのとき、UIアセットの情報はCustomUIInfo<T>として登録されます。
内部にはUIアセットのGuidのみが保存されています。
ここに登録されたUIアセットは、別途定義したCustom UI Loaderによってロードされます。
UI Loader
UIアセットの読み込みを実際に行う、IUILoaderインターフェースを実装したクラスです。 次の3つのUI Loaderが存在します。
Asset Path UI Loader
UIアセットのパスからUIアセットを読み込むUI Loaderです。UnityEditor.AssetDatabase.LoadAssetAtPath<T>()からアセットをロードします。
この UI LoaderはEditorOnlyです
Resource UI Loader
UI Catalog上に保存されているアセットの実体を直接読み込むことができるUI Loaderです。
Custom UI Loader
Custom UI LoaderはUIのロード方法を独自に定義することができるUI Loaderです。
利用するにはCustomUILoader<T>を継承するクラスを作成し、次のサンプルコードのようにUI Catalogに登録する必要があります。
RuntimeUICatalog.Instance.UxmlUICollection.RegisterCustomUILoader(
new AddressablesUILoader<VisualTreeAsset>()
);
RuntimeUICatalog.Instance.UssUICollection.RegisterCustomUILoader(
new AddressablesUILoader<StyleSheet>()
);