アルゴンUE4/UE5&アプリ開発日記

UE4/UE5の機能やプラグインを紹介します。初心者や中級者向けになってます!!

【UE5/UE4】様々なフロー制御の紹介

結構フロー制御を色々やります( ゚Д゚)!

結構色々なフロー制御があるので、

今回はそのフロー制御の紹介と簡単な使い方など紹介していきたいと思います。

※UE5.3を使用して説明していこうと思います。

※フローの説明をしますがこの方がいいですとかあればコメントください!

フロー制御とは?

フロー処理とはBoolの値や数値や配列情報などに合わせて、

実行する動作の制御が可能になっているノードになります。

各種条件分岐の処理を用いて皆さんも、

ゲームを制作するうえでのプレイヤーの動作の制御はもちろん、

処理フローの軽減などに役立たせているかと思います。

その中でよく使いそうなものを紹介していけたらと思います。

今回紹介するノードをまとめてみました。

紹介するフロー制御

・目次に戻る

参考資料

Unreal Engine でのフロー制御 | Unreal Engine 5.3 ドキュメント

Gate Explained For Beginners - Unreal Engine 5 Flow Control Blueprint - YouTube

Multi Gate Explained For Beginners - Unreal Engine 5 Flow Control Blueprints - YouTube

フロー制御の紹介と簡単な使用例

それでは実際に各種フロー用のノードを紹介します。

その前にまずフロー関係の処理がまとまっているカテゴリを紹介します。

イベントグラフ内で右クリックして下の方にある「Utilities」を選択し、

その中にある「Flow Control」に集約されてます。

フロー処理のBPのカテゴリ

それでは実際に個々のノードを紹介していきます。

まずはBranchノードから説明します。

このノードを使ってない人はいないぐらいにはよく使われるかと思います。

Bool型の値がTrueかFalseかによって違うフローにするための、

分岐処理用のノードになります。

ボタンを押したときに爆弾を1つより多く持っているかどうか確認して、

ある場合はTrueの方のフローを実行して、ない場合はFalseを実行します。

Branchノードの仕組み

続いてDoOnceの説明をしていこうと思います。

DoOnceは文字通り一度だけ実行したいで動作のために使用するノードです。

ResetフローとStartClosedというBool値があります。

Resetフローはもう一度動作できるようにするためのフローで、

StartClosedはこのBool値がTrueになったら最初から動作しない状態になります。
※StartClosedがTrueでもリセットした場合は動作するようになるので注意!

DoOnceでは一度しか開かない扉やリロードしない大技などの制御をする際に、

私は使用していたりします。

Do Onceの処理説明画像

続いてDoNの説明になります。

こちらはDoOnceと違い指定した数値の回数まで行えるというものです。

それだけ聞くとForLoopと同じように聞こえますが、

ForLoopでは一度入ったらその回数必ず行いますが、

DoNノードはEnterノードが呼ばれた時1回実行します。

ですのでプレイヤーや処理を数回行わせたい場合に向いてます。

Exitフローでの動作とともに今何回目かの値(Counter)を渡してくれます。

今回はその値を元に爆弾を置く回数を指定していたりします。

DoNの例題処理

UE5.0系からDoOnce Multiinputというのが増えています。

DoOnce MultiInputではA・B・C・Dの どれか一度実行出来ます。

Resetフローを実行するとリセットされて、

またどれか1つのフローを実行できるようになります。

DoOnce Multiinputの説明

続いてFlipFlopの説明をしていきます。

こちらも良く使われているかなと思いますが、

AとBのフローを交互に行うノードとなっています。

ボタンのオン・オフなどの切り替えに使ったりするかと思います。

IsAのBool値でAを実行している場合Trueで、

Bを実行している場合はFalseが返るようになっています。

FlipFlopの説明

続いてForLoopForLoopWithBreakを説明します。

ForLoopは指定した回数分フローに入ったら実行します。

これはForLoopWithBreakと変わりありません。

FirstIndexはどの数値から始めるのかという値で、

LastIndexはどの数値で終了するかの値です。

LoopBodyフローで何度も行う処理を実行して、

CompletedフローではそのLoopが完了したときに呼ばれます。

こちらもForLoopWithBreakは同様の動作をします。

じゃあForLoopWithBreakはForLoopと何が違うのか?というと、

途中で中断するためのBreakフローを持っています。

こちらのフローに入るとLoop処理が中断されます。

※注意点としてLoopBodyでは使用してもその通り動かないノードもあります。
 DelayノードやTimeLineノード等は注意してください。

ForLoopWithBreakそれとは別にForEachLoop・ForEachWithBreakというものも用意されています。

これは配列(同様の要素が順番に入っている変数)の中身に合わせて、

ループ処理をするためのノードになります。

Arrayのところに配列を指定してあげて、

配列内の変数と配列の要素の情報を活用してループ処理を実行します。

ForEach用ノードの紹介

それから繰り返し処理としてwhileLoopというものもあります。

こちらはConditionというBool値がtrueの場合は繰り返し、

FalseになったらCompletedフローが実行される繰り返す処理になります。

こちらは回数の上限はなく何かのBool値がFalseになった時に、

Loop処理を終了するものになります。

WhileLoopの説明

続いてGateを説明していきます。

GateはEnterフローで実行を行います。

Openフローを実行している状態でEnterフローを実行するか、

最初からStartClosedがOFFでEnterフローを実行する場合、

Exitフローが実行されてその後の処理が実行できるようになります。

CloseフローはOpenになっている状態をクローズします。

ToggleはOpenとCloseを切り替えてくれるフローになります。

扉の開閉や範囲内のアイテムの取得など、

一定の条件でかつ何かアクションが行われたときに、

何かをしたい時に活用できるフロー制御のノードになるかなと思います。

Gateの処理の説明

続いてMultiGateというものもあります。

MultiGateに関してはGateとは色々と異なります。

0、1、2と順番に行うような形になります。

DoNとは違いLoopのBool値があったり、

Is RandomのBool値がありランダム動作なども行えます。

LoopがTrueになっている場合は0、1、2と順番通りで繰り返します。

※LoopがFalseになっている場合は最後のOutまで行ったら、
 それ以降は実行されないのでResetフローを実行する必要があります。

MultiGateの紹介

最後にSequenceになります。

Sequenceは一つの実行で複数のフローを順番に実行します。

Thenの数値が低い順番から実行していきます。

Sequenceの説明

以上が各種フロー制御のノードの説明になります。

フロー制御の設定の各設定値が分かるといろんな作り方が見えてくるかなと思います。

・目次に戻る

最後に

見ていただきありがとうございました。

今回はフロー関連の説明になりましたが

まだまだEnumやDelayなど様々なものがあるので、

そちらも今後紹介していけたらと思います。

・目次に戻る