DataAssetなどでEditorから参照する際に
このようなコードを作成すると
UPROPERTY(EditDefaultsOnly, DisplayName = "敵のアセット") TSubclassOf<AActor> EnemyAsset;
プロジェクト内すべてのActorがリストアップされてしまい、
検索が大変
設定するアセットを間違える等のミスが考えられます。
これを解消するために
特定のインターフェイスを継承しているクラスのみがリストアップされるようにしたいと思います。
調べると以下のAllowedClasses metaが候補に上がりますがこちらは自作のC++のクラスなどは検知されないようです。(UE5.3)
Unreal側で用意されているクラスをフィルタリングしたいのならこちらを使えば良さそうですね。
meta = (AllowedClasses = "MyClass")
Widget内のListViewなどEntryWidgetClassはUserObjectListEntryを継承した
Widgetのみしか選択できないですね
こちらのソースコードを確認したところ
MustImplement metaが使用されていました。
これを使用して書くと以下のようになりました。
そのままインターフェイスを指定すると
フルパスを指定するように警告ログがでて正常にフィルターされません。
インターフェイスがあるクラスまでのパスを記述する必要があるようです。
UPROPERTY(EditDefaultsOnly, meta = (DisplayName = "敵のアセット", MustImplement = "/Script/TESTProject.MyTest")) TSubclassOf<AActor> EnemyAsset;
これで結果がフィルタリングされて
見やすくなりますね。
積極的に活用していきたいところです。