PaperSloth’s diary

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

UE4 便利なUPROPERTY(Bitmasks, EditCondition)

目次

・Bitmasks
・EditCondition

環境

Visual Studio Community 2015
・Unreal Engine4.16

Bitmasks

meta = (Bitmask)

オンオフの切り替えが可能なフラグをドロップダウン形式で編集可能になります。
追加方法はUPOPERTYのmetaに"bitmask"を追加します。

UPROPERTY(EditAnywhere, Category = BitMask, meta = (Bitmask))
int bitTestFlag;

f:id:PaperSloth:20170704202246p:plain

図のようにFlagが連番で並びます。
BitMaskのみのUPROPERTYを使用したいということはまずないでしょう。


そこで、列挙型と組み合わせて使用することがあります。
今回はゲーム中の攻撃をイメージして使ってみます。

列挙型定義
通常は攻撃とダメージ種別は分けるでしょう。
ですが、今回は説明のために統合された列挙型があると仮定します。

UENUM(meta = (Bitflags))
enum class EAttackType
{
    Blow,	 // 打撃
    Slash, 	 // 斬撃
    Shot,	 // 射撃
    Cannon,	 // 砲撃
    Damage, // ダメージを与える
    Heal, 	 // 回復する
    Drain,	 // 吸収する
};

変数定義
Bitmaskと合わせてBitmaskEnumを加えました。

UPROPERTY(EditAnywhere, Category = Attack, meta = (Bitmask, BitmaskEnum = "EAttackType"))
int8 attackType;

BitmaskEnumを加えることで理解しやすく意味のあるコードになりました。
f:id:PaperSloth:20170704203618p:plain

さらにbitmaskは複数の状態を持たせる事ができます。
そのため
回復効果のある射撃
f:id:PaperSloth:20170704203947p:plain
HP吸収の斬撃兼打撃属性の攻撃
f:id:PaperSloth:20170704203956p:plain
等を作ることが出来ます。
(先も述べたように通常は分けます。このような使い方はしないでしょう。)


EditCondition

meta = (EditCondition = boolean)

プロパティの編集が許可されているかどうかを示すための条件を指定します。
ようはdetailタブから変更できるかどうかを切り替えるものです。

今度はゲーム中のfadeをイメージして使ってみます。

UPROPERTY(EditAnywhere, Category = Fade)
bool isFade;
UPROPERTY(EditAnywhere, Category = Fade, meta = (EditCondition = isFade))
float fadeTime;

遷移が禁止されている場合はFadeIn, Outの時間を変更できません。
f:id:PaperSloth:20170704204840p:plain

遷移が許可されている場合はFadeIn, Outの時間を任意で変更することが可能になりました。
f:id:PaperSloth:20170704204921p:plain


最後に余談ですが
UPROPERTY()のmetaの定義は大文字、小文字どちらでも可能です。
UPROPERTY(meta = (EditCondition = isFade))
UPROPERTY(Meta = (EditCondition = isFade))