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>()
);