【UE5】プロパティメタデータ指定子
プログラマーの尾関です。
今回はUEで用意されているプロパティメタデータ指定子についてまとめてみました。
プロパティメタデータ指定子とは
プロパティメタデータ指定子とは、クラス、関数、プロパティなどを宣言する際に使用するメタデータキーワードのことです。これにより、エンジンやエディタのさまざまな側面での動作を制御できます。
以下、メタデータキーワードの一例とその説明です。

パラメータに日本語を指定する時の注意点
ここで注意点ですが、例えばCategoryに日本語 (マルチバイト文字) を指定するときにソースコードが “Shift-JIS” の場合、エディタで文字化けしてしまいます。


その場合はソースコードの文字コードを「UTF-8 BOM付き」で保存すると正しく表示されるようになります。

DisplayName: 表示名の変更
DisplayName はエディタ上での表示名を変更できます。
英語よりも日本語の方が見た目で意味がわかるので、可能な限り指定した方が良い項目です。
UPROPERTY(EditAnywhere, meta = (DisplayName = "アイテムドロップ率"))
float DropRatio;

Units: 単位の指定
Units は単位の指定です。単位を表示することでパラメータの意味が明確になります。
UPROPERTY(EditAnywhere, meta = (DisplayName = "アイテムドロップ率", Units="%"))
float DropRatio;

また ForceUnits を指定すると、単位指定で入力できるようになります。それについては以下のページが詳しいです。
ClampMin/ClampMax: 最小値と最大値の設定
ClampMin/ClampMaxを指定すると入力可能な値を制限することが可能です。
UPROPERTY(EditAnywhere, meta = (DisplayName = "アイテムドロップ率", Units="%", ClampMin = 0.00, ClampMax = 100.00))
float DropRatio;

ClampMin/ClampMax のどちらかを指定すると値をクランプするだけですが、Min/Max両方のメタデータ指定することでスライダーっぽいUIになります。
EditCondition: 編集可能条件の設定
EditConditionには編集可能となる条件を指定できます。例えば敵の種類が「ボス」の場合のみアイテムドロップ率が有効、といった指定ができます。
// 敵の種類.
UENUM()
enum class eEnemy: uint8 {
NORMAL UMETA(DisplayName = "雑魚"),
ELITE UMETA(DisplayName = "中ボス"),
BOSS UMETA(DisplayName = "ボス"),
};
...
UPROPERTY(EditAnywhere, meta = (DisplayName = "敵の種類"))
eEnemy Type;
UPROPERTY(EditAnywhere, meta = (DisplayName = "アイテムドロップ率", Units="%", ClampMin = 0.00, ClampMax = 100.00, EditCondition = "Type == eEnemy::BOSS"))
float DropRatio;

なお UENUM は “==” 以外の演算子の判定はできない印象で、例えば「敵の種類が 中ボス (eEnemy::ELITE)以上」という判定はうまくいきません。(UE 5.4.2 で確認)
ただ int のような数値データであれば判定可能です。例えば HP が 100以上ならば編集可能とするなどです。
UPROPERTY(EditAnywhere, meta = (DisplayName = "敵のHP"))
int Hp;
UPROPERTY(EditAnywhere, meta = (DisplayName = "アイテムドロップ率", Units="%", ClampMin = 0.00, ClampMax = 100.00, EditCondition = "Hp >= 100"))
float DropRatio;

さらに EditConditionHides を指定すると、EditCondition が false の場合に非表示にすることが可能です。
UPROPERTY(EditAnywhere, meta = (DisplayName = "敵の種類"))
eEnemy Type;
UPROPERTY(EditAnywhere, meta = (DisplayName = "アイテムドロップ率", Units="%", ClampMin = 0.00, ClampMax = 100.00, EditCondition = "Type == eEnemy::BOSS", EditConditionHides))
float DropRatio;

参考
今回の記事を書くにあたって以下のページを参考にさせていただきました。