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;
フラグが無効な状態では速度を編集することができない
フラグが有効な状態のため、速度を編集することができる
この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性能の変更はできない
弾丸の種類がミサイルの場合はHoming性能の変更ができる
Unreal C++のproperty向けのmetadataはほかにもたくさん便利な機能があります。
その中でもEditConditionを適切に設定することは他職種とのやり取りが多い、ある程度規模の大きなタイトルでは必須ではないかと思います。
以上です!