【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;

参考

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

Follow me!