![見出し画像](https://assets.st-note.com/production/uploads/images/70488114/rectangle_large_type_2_d4c47b3182e02bfb1cba5ce2b6b19d33.jpeg?width=1200)
UE5から始める C++ & BP 07 【Blueprint版】Flow Control(Branch)
変数や今回のif文にあたるBranchを書いてみて分かったことは、
今までサクッと覚えていた新しい言語の文法本は偉大!
いざ、自分で書いてみると用語を間違って書いていたり、これってどういう動きをするのか?
言語化すると圧倒的に難しいです。
今まで先人たちの恩恵でプログラムが出来ていたのだと感謝しました。
何気ないことを当たり前に受け取れる
すごい偉大なことです。
前回は「四則演算(+ - x ÷)」方法について調査しました。
今回は「Flow Control(Branch)」方法について調査していきます。
【Blueprint版】Flow Control(Branch)
「もし、あの時○○をしていたら。。。」
「選択肢1~4のどれかを選択しなさい。」
常に選択を迫られています。
プログラミンでは分岐する処理を実装することができます。
今回は、Flow Control(制御文)について学習します。
今回出来ること
変数の値に応じて、PrintStringを切り替えて出力します。
学習用の新規レベル「Chapter_2_FlowControl_Branch」を作成する
学習用の新規レベルを作成します。
[File]から[New Level…]を選択します。
![](https://assets.st-note.com/img/1642859557996-kdZGXnU5Cb.png)
[Default]を選択します。
![](https://assets.st-note.com/img/1642859565049-s01EvOlzfS.png)
「Maps」フォルダに「Chapter_2_FlowControl_Branch」を入力し、[Save]ボタンをクリックします。
![](https://assets.st-note.com/img/1642859613718-CIkb8CDCpa.png?width=1200)
Blueprintを複製する
「BP_SampleActor」を複製(Ctrl + W)して、「BP_FlowControl_Branch」を作成します。
![](https://assets.st-note.com/img/1642859621564-SW0g7cQPRe.png?width=1200)
Flow Controlに使用する変数を宣言する
今回使用する変数を宣言します。
![](https://assets.st-note.com/img/1642859644464-uDaFdHTWPa.png)
![](https://assets.st-note.com/img/1642859632104-uaTXmXyBhX.png)
Branchノードで処理を切り替える
[Branch]ノードを使用して、「Hello Wordl!」を出力するPrintStringと、計算結果をPrintStringする処理を切り替えます。
Sequenceノードの[Then 0]実行ピンと「Hello World!」を出力する[PrintString]ノードの実行ピンの接続を解除します。
[Branch]ノードを追加します。
![](https://assets.st-note.com/img/1642859710302-p3xshRTXug.png?width=1200)
変数[IsPrintHello]のGetノードを追加し、[Branch]ノードの[Condition]ピンに接続します。
[Branch]ノードを図のように実行されるように実行ピンを接続します。
![](https://assets.st-note.com/img/1642859671786-ZFB3TqvFqJ.png?width=1200)
[Compile]ボタンをクリックします。
![](https://assets.st-note.com/img/1642859727230-8feNHCxUvF.png)
LevelEditorに移動し、「BP_FlowControl_Branch」をViewportにDrag&Dropします。
![](https://assets.st-note.com/img/1642859734715-zEGAKe9xXf.png)
[Play]ボタンをクリックします。
![](https://assets.st-note.com/img/1642859742355-fl1DdUFbi1.png)
「Hello World!」を出力する[PrintString]ノードの処理のみが実行されました。
![](https://assets.st-note.com/img/1642859749439-4TdH20vzHn.png)
Playボタンを押した時にBlurprintEditorを表示しておくと、Blueprintがどのような動きをしているか確認できます。
![](https://assets.st-note.com/img/1642859757742-fUxneD0bwJ.png?width=1200)
[Branch]ノードは[Condition]ピンに接続したノードの値に応じて、実行される実行ピンが切り替わります。
今回は変数[IsPrintHello]に[True]の値が設定されていたので、[Branch]ノードは[True]の実行ピンに処理を切り替えて、[Hello World!]を出力する[PrintString]ノードを実行しました。
![](https://assets.st-note.com/img/1642859765614-Y4pNqXs0BR.png?width=1200)
![](https://assets.st-note.com/img/1642859777634-UXWZaTKnnX.png)
比較演算子ノードで処理を切り替える
2つの変数[NumA]と[NumB]の値を比較して分岐するように変更します。
変数[NumA]と変数[NumB]が一致しているかを比較して、その結果を[Branch]ノードの[Condition]ピンに接続します。
![](https://assets.st-note.com/img/1642859790533-KT5LFHVMkd.png?width=1200)
比較演算子ノードを追加する時は、比較演算子で検索し、図のノードコメントをメニューから選択します。
後ほど、比較演算子の一覧を載せましたので有効活用してください。
![](https://assets.st-note.com/img/1642859801240-fmGdkoT465.png?width=1200)
[Compile]ボタンをクリックします。
![](https://assets.st-note.com/img/1642859809217-PXDkso8kVo.png)
[Play]ボタンをクリックします。
![](https://assets.st-note.com/img/1642859816307-VtQ1dO6Q2Z.png)
計算結果のPrintStringが出力されました。
![](https://assets.st-note.com/img/1642859822622-coWcW7TbkV.png)
変数[NumA]の値は[1]、変数[NumB]の値は[2]なので、一致しません。
[Branch]ノードは[False]の実行ピンに処理を切り替えて、計算結果を出力する[PrintString]ノードを実行しました。
![](https://assets.st-note.com/img/1642859834226-kAjD1mhLca.png?width=1200)
比較演算子は「一致している(Equal)」以外にも用意されています。
一覧を用意しましたので、有効活用してください。
![](https://assets.st-note.com/img/1642859843229-NhcOXVJa36.png?width=1200)
![](https://assets.st-note.com/img/1642859865934-y30TmwIRZ7.png?width=1200)
論理演算子ノードで処理を切り替える
変数NumCが「10より大きく、30以下」のような範囲内かどうかで分岐させます。
[AND]と書かれたノードは[AND Boolean]と検索して追加してください。
![](https://assets.st-note.com/img/1642859880362-Csu17kDoII.png?width=1200)
「Make Literal Int」は変数を作成せずに、VariableType(変数の型)の値を使いたい時に使用するノードです。
「Make Literal (VariableType)」をメニューから選択します。
「Make Literal (VariableType)」のValueに値を設定します。
![](https://assets.st-note.com/img/1642859887803-0bpofmPJr0.png?width=1200)
[Compile]ボタンをクリックします。
![](https://assets.st-note.com/img/1642859894941-5QDDmGpmnj.png)
[Play]ボタンをクリックします。
![](https://assets.st-note.com/img/1642859901881-EqjTREEiUL.png)
「Hello World!」を出力する[PrintString]ノードの処理のみが実行されました。
![](https://assets.st-note.com/img/1642859907745-FGJaisShpo.png)
今回は変数[NumC]に[15]の値が設定されていたので、「10<NumC(15)」と[NumC(15)<30]の条件が両方ともTrueだったので、[AND Boolean]ノードは[True]になります。
[Branch]ノードは[True]の処理に切り替えて、[Hello World!]を出力する[PrintString]ノードを実行しました。
![](https://assets.st-note.com/img/1642859915254-wZy3FNtSaI.png?width=1200)
[AND Boolean]のように複数の条件を組み合わせて、より複雑な条件を表すときに使うのが論理演算子です。
論理演算子は「AND Boolean」以外にも用意されています。
一覧を用意しましたので、有効活用してください。
![](https://assets.st-note.com/img/1642859930693-5IAKQxkcNi.png?width=1200)
![](https://assets.st-note.com/img/1642859954670-CNCk0RC8Ts.png?width=1200)
論理演算子はこの3種類以外にも用意されています。
興味があれば調べてみてください。
![](https://assets.st-note.com/img/1642859974958-n94hoHSHpB.png?width=1200)
複数の選択肢で分岐する
変数[CalcType]の数値で計算結果を1つだけPrintStringで出力するように変更します。
DefaultValueを変更して、引き算のPrintStringが出力されるように変更します。
![](https://assets.st-note.com/img/1642859992638-AvYFnDKVV3.png)
図のように[Branch]ノードを追加して処理を切り分けてください。
![](https://assets.st-note.com/img/1642860006088-XrTL1dvwn1.png?width=1200)
[Compile]ボタンをクリックします。
![](https://assets.st-note.com/img/1642860014244-hXa80AcklJ.png)
[Play]ボタンをクリックします。
![](https://assets.st-note.com/img/1642860025711-JL2wCOtgB8.png)
引き算の結果が表示されます。
![](https://assets.st-note.com/img/1642860032917-NmZpKgZgP0.png)
変数[IsPrintString]が[False]なので、最初の[Branch]ノードは[False]の実行ピンを実行します。
次の[Branch]ノードでは、変数[CalcType]と値が一致していないので[False]の実行ピンを実行します。
次の[Branch]ノードでは、変数[CalcType]と値が一致するので、引き算の[PrintString]ノードが実行されます。
[Branch]ノードを複数組み合わせることで、複数の選択肢に分岐することができます。
![](https://assets.st-note.com/img/1642860095500-ms3MeudPbT.png?width=1200)
まとめ
簡単な内容で文字数も今までより少ないのですが、倍ぐらい時間が書きました。
長文を書く方が楽ですね。
それでは、C++側をまとめます。
UE4から始めるC++&Blueprint 進捗とロードマップ
Zennで進捗報告を行い、GitHubでロードマップを公開中です。
よかったら覗いてみてください。