Skip to content

UI Catalog

UI CatalogVisualTreeAsset、およびStyleSheetのロード方法を集約したScriptableObjectです。
Assets/Resources/UICatalog.assetに自動で生成されます。

Viewクラス、またはStyleクラスからUIアセットの読み込みを行うときに利用され、UI Catalog に登録されている内容からロード方法とUI Loaderの決定を行います。
UI Loaderはロードの実行を行う概念です。

ロード方法はHaikaraUI AttributeAssetReferenceModeで決定され、UICatalog上にUIアセットが分類された状態で登録されます。
分類されたアセットはそれぞれUIAssetInfo<T>というクラスとして、uxmlAssetsまたはstyleAssetsに保存されます。

Automated Generating

UI CatalogDidReloadScriptsのタイミングで Assets/Resources/UICatalog.assetに生成されます。
このパスは固定です。

Manual Generate UI Catalog

自動生成の他に、UI Catalogの生成を手動で実行することも可能です。
メニューバーを Haikara > Regenerate UI Catalog の順で選択することで生成処理が実行されます。

UIAssetInfo<T>

UIAssetInfo<T>には次の種類が存在します。

UIAssetInfo<T>の種類AsetReferenceModeIUILoaderの種類
ResourceUIInfo<T>ResourceResourceUILoader
AssetPathUIInfo<T>AssetPathAssetPathUILoader
CustomUIInfo<T>CustomCustomUILoader

ResourceUIInfo<T>

[HaikaraUI]で指定されたAssetReferenceModeResourceのとき、またはデフォルトのとき、UIアセットの情報は ResourceUIInfo<T>として登録されます。
UIアセットのGuidとアセットの実体が保存されており、読み込み時には直接それが渡されます。
ResourceUIInfo<T>が使われる場合は、ビルドの中に直接アセットが含まれることに注意してください。

AssetPathUIInfo<T>

AssetReferenceModeAssetPathのとき、UIアセットの情報は AssetPathUIInfo<T>として登録されます。
UIアセットのGuidと、UnityEditor上でのアセットのパスが保存されています。
このUIAssetInfo<T>はEditorOnlyです

CustomUIInfo<T>

AssetReferenceModeCustomのとき、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に登録する必要があります。

csharp

    RuntimeUICatalog.Instance.UxmlUICollection.RegisterCustomUILoader(
        new AddressablesUILoader<VisualTreeAsset>()
    );
    
    RuntimeUICatalog.Instance.UssUICollection.RegisterCustomUILoader(
        new AddressablesUILoader<StyleSheet>()
    );

参考: Addressables Ui Loader