PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

UE4 EditConditionsについて

環境

UE4.23.0
Visual Studio Community2017

EditConditionsについて

EditConditions metadataはbool値によって任意のPropertyの編集を有効化/無効化する機能です。

例 : 水泳可能フラグが有効なキャラクターのみ水泳速度を設定する場合

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Character")
bool IsSwim;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Character", meta = (EditCondition = "IsSwim"))
FVector SwimVelocity;

フラグが無効な状態では速度を編集することができない
f:id:PaperSloth:20191012175849p:plain
f:id:PaperSloth:20191012175915p:plain

フラグが有効な状態のため、速度を編集することができる
f:id:PaperSloth:20191012180154p:plain
f:id:PaperSloth:20191012180201p:plain

このmetadata自体はUE4.23以前のバージョンからも使用できました。


しかし、UE4.23からはこのmetadataに簡単なbool式を割り当てることが可能となりました。
下記の「新機能: EditConditions メタデータの改善 (ベータ版)」を参照
www.unrealengine.com

例えばEnumとの比較やint値との比較などが可能です。
UE4.23以前のEditConditionsでは下記はエラーにはなりませんが認識されませんでした。

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Character", meta = (EditCondition = "IsSwim == true"))
FVector SwimVelocity;


UE4.23からはbool式の評価ができるため、下記のような使い方ができます。
例 : 弾丸の種類がMissileの時だけホーミング性能を設定できる

UENUM(BlueprintType)
enum class EBulletType : uint8
{
    Beam,
    Missile,
};
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Bullet")
EBulletType BulletType;

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Bullet",
         meta = (EditCondition = "BulletType == EBulletType::Missile"))
float HomingAcceleration;

弾丸の種類がビームの場合はHoming性能の変更はできない
f:id:PaperSloth:20191012181301p:plain
f:id:PaperSloth:20191012181320p:plain

弾丸の種類がミサイルの場合はHoming性能の変更ができる
f:id:PaperSloth:20191012181326p:plain
f:id:PaperSloth:20191012181516p:plain



Unreal C++のproperty向けのmetadataはほかにもたくさん便利な機能があります。
その中でもEditConditionを適切に設定することは他職種とのやり取りが多い、ある程度規模の大きなタイトルでは必須ではないかと思います。

以上です!