大量のフラグが存在する場合の管理方法

これに関してはUE4に限った話ではないのですが、UE4ならではの実装方法があるかもしれないと質問させていただきます。



私は現在、いわゆる「スキル」を持つプレイヤーの動作を、スキルの効果などによって変化させるようなものを制作しています。例えば、拘束やダッシュ、継続ダメージetc…



しかし、スキルの数が多くなればなるほど、スキルを使っているか否かでプレイヤーの行動を制限したり、逆に使われているか否かで逆に制限されたりする場合のフラグ管理がとてつもない量になってしまっています。



細かく言うと、スキルごとに「使っているか否か」or「使われているか」で「移動可能か?」「回避行動可能か?」「攻撃可能か?」「スキル使用中移動可能か?」等といった制限が異なるのですが、これらを判断するために「各スキルを使っているかどうか」で管理しようとすると、「え?全スキルのフラグを見なければならないのか?」と思うように(以下画像のようになってしまう)なってしまい、非効率すぎると考えています。



(まだ少ないから良いが数百単位で仮に増えた場合全てここに書く?イヤイヤイヤイヤ…)



皆さんは、どのような実装方法or管理方法をとっているのでしょうか。

※私の中での一つの解決案で、「アニムグラフ側で、スキル使用アニメーション再生時に移動不可フラグを立てるor折る」と言ったことを実装しようと考えています。
が、ステートマシン内でフラグのSet方法が分からず...と言った状況です。

遷移の矢印内でのこの画面でSetさせたい。Setノードは置けるから何かしらの方法で出来る?

219197-e28fdcdbcf819c1469b77c82dac9e5fa.png



情報の方、よろしくお願いいたします。

そういう場合は、4.15から導入された Set という仕組みを使うのが便利です
普通にsetしたりgetしたりするやつとは別の、配列に似てる機能です
データの中に何があって何がないかというのを管理するために使う物です

フラグの管理に使う時は、列挙型(ENUM)のSetを作って使うのがいいです

検索しにくいので情報が得にくいし、ちょっと説明もむずかしいんですが

例えば各スキルごとに、何が出来て何が出来ないかのSetを作って
使用中のスキルのSetをUnionすると、全てのスキルの状態を足した物が作れます
それをBranchノードなどでチェックすれば各スキルの使用状況は気にしなくて済みます
特殊な条件で単純にUnionするだけじゃ無理な場合は、正しいSetになるようにブループリントを追加して

Bitmaskを使う方法でも同じことができます
ただSetよりもわかりにくいし、フラグの数が32個までという窮屈な制限もあるので
今から使うならSetの方がいいと思います

フラグの管理に使う時は、列挙型(ENUM)のSetを作って使うのがいいです

例えば各スキルごとに、何が出来て何が出来ないかのSetを作って


私の理解が及ばず申し訳ないのですが、ここでのenumは例えば「制限をかける列挙型(ActionConstrainsと仮称)」であるとし、要素に「Move」「Attack」「Avoid」を追加。
各Perk内変数にActionConstrains型変数(以後AC変数と呼称)を用意し、制限をかけたい要素にデフォルト値としてチェックをつける。
そして、使用されたら、AC変数をUnionし、管理BPはUnionしたAC変数を見て、例えば「Move」要素が残っていたら「移動に制限をかける」。

といった流れを行えばよい。ということでしょうか。
解釈間違いでしたら申し訳ありません。

以下の方法でSetで運用できそうなので解決済みとさせていただきます。ありがとうございます!



[スキルBP]



[AddActionConstrains関数内]

219725-e6acef69cfbd569569d2caeff2c6f7a0.png

この方法に誤りがありました。

理由はこちらの質問です。