Tips

【UE4】ブループリント入門【第5回】

【UE4】ブループリント入門【第5回】

■この連載について

この連載ではUnreal Engine4 (以下UE4)初心者の方向けに、
ブループリントの基本的な使い方を解説していきます。
プログラム初心者の方も想定して、概念的なところの解説も挟みつつ進めていきたいと思います!

初めての方は過去の記事も参考にしてください。 ⇒ 記事一覧

■環境

Unreal Engine 4.22.3

■今回の内容

プログラムで非常に大事な条件分岐の処理を説明します!


■条件分岐の処理とは

プログラミングにおける条件分岐の概念について簡単に確認しておきましょう。
条件分岐とは言葉で言うと、「ある条件を元にその後の処理を分けるもの」と言え、
一般的なプログラミング言語ではif文とか呼ばれるものになります。

いくつか具体例で確認してみましょう。
例1
条件:点数が60点以上
OK :合格
NG :不合格

例2
条件:村人Aと会話する
OK :サブイベント解放
NG :サブイベント非解放

このような日常やゲーム内で頻繁に行われる判定、およびそれに基づく処理を条件分岐と呼んでいます。

■ブループリントで作る条件分岐

実際にブループリントで条件分岐の処理を作成していきます。
何らかのプログラム言語に触れたことがある方は「if」に馴染みがあることかと思いますが、UE4のブループリントではifではなく「Branch(ブランチ)」と呼ばれるノードを使用します。
検索の際には「if」「branch」「bra」とかで見つかります。

まずこのノードの各ピンについて説明します。
①入力ピン(Condition)
処理を分岐するための判断材料となるピンで、Boolean型のため「True」もしくは「False」を受け取ります。
この値がTrueなのかFalseなのかによって、どちらの実行ピンに処理が流れるかが決まります。

②実行ピン(True/偽)
実行ピンである「True」「偽(False)」はConditionの結果によって実行されるピンとなります。
ConditionがTrueであれば「True」ピンに続く処理が実行され、Falseであれば「偽(False)」に続く処理が実行されます。

■サンプルで確認

まずはサンプルを作成して確認しましょう。
プロジェクト(BluePrintTutorial)を開いて、レベルブループリントを開きましょう。
以前作成した処理は消さずに、BeginPlayノードのみ一旦切り離してください。

次にInteger型の変数「Point」を用意して、デフォルト値は「70」としておきましょう。

今回は以下のような処理を作成したいと思います。(最初のセクションの例1)

条件:Pointが60以上かどうか
True :「合格」を表示する
False:「不合格」を表示する

まずは条件部分を作成します。イベントグラフにPointノード(Get)を配置し、実行ピンを引っ張ったら「>」を検索してみましょう。「>」と「>=」の2種類が見つかるかと思いますが、「>=」の方を選択して下さい。

配置されたノードの上側の入力ピン(A)にはPointがつながっているかと思います。
下側の入力ピン(B)には「60」を直接入力してください。

ここで「>=」ノードの説明ですが算数や数学で言うところの「≧」にあたるノードとなり、以下の処理が行われます。

Aの値がBの値以上であれば結果としてTrueを、そうでなければFalseを返す。

今回はAにPoint、Bに60を設定しているので、「Pointの値が60以上であればTrue」ということになります。
(「>=」は比較演算子と呼ばれます。この他の比較演算子については後程まとめます。)

次はBeginPlayノードを引っ張って、先ほど紹介したBranch(ノード)を配置してください。
入力ピン(Condition)には上で作成した60点以上の判定結果を繋ぎ、True/偽の処理はそれぞれPrintStringを繋いで以下の様にしましょう。

ここまでできたら一度コンパイル⇒保存し、再生してみましょう。
Pointのデフォルト値を70に設定しているので「合格」と表示されるはずです。

このように、ある条件の判定結果に応じて処理を分岐させるのが条件分岐の処理で、非常によく使われる仕組みとなります。
Pointのデフォルト値を60未満や60ちょうどなどにして、判定結果によって表示が変わることを確認しておいてください。

■比較演算子について

先ほどのサンプルで、「>=」ノードを使って「AがB以上」であることの判定を行いました。
この他にも比較演算子は存在するので、ここでまとめておきたいと思います。
※数値(Integer型やFloat型)の比較に使われるものを紹介しますが、別の型の比較もおよそ同様です。

記号 検索 使用例 説明
== Num1とNum2が等しければTrue(それ以外はFalse)
> Num1がNum2より大きければTrue(それ以外はFalse)
>= Num1がNum2以上ならTrue(それ以外はFalse)
< Num1がNum2より小さければTrue(それ以外はFalse)
<= Num1がNum2以下ならTrue(それ以外はFalse)
!= Num1がNum2と等しくなければTrue(それ以外はFalse)

以上が良く使われる比較演算子で、一般的なプログラム言語と同様となっています。
使い方は先ほどの「>=」と同様なので、気になる方は置き換えて試してみて下さい。

■確認問題

最後にいくつか確認問題を用意したのでやってみてください。

▼練習1

Integer型の変数Num1とNum2の値が等しければ「OK」、違っていれば「NG」と表示する処理を作成してください。
(BeginPlayから繋ぐ)

解答例

先ほど紹介した「==」ノードを使っています。

▼練習2

Integer型の変数Num1とNum2の合計が100より大きければその合計値を、違う場合は100を表示する処理を作成してください。
(BeginPlayから繋ぐ)

解答例

簡単な計算処理を絡めてやや複雑にしてみました。

▼練習3

Integer型の変数Num1とNum2の合計が
・15の倍数なら「FizzBuzz」を表示
・5の倍数なら「Buzz」を表示
・3の倍数なら「Fizz」を表示
・いずれも該当しない場合は、合計値を表示
するような処理を作成してください。
(BeginPlayから繋ぐ)

解答例

最後はやや難し目なので順に説明していきます。
まずは1番上の「15の倍数なら「FizzBuzz」を表示」だけ作成してみましょう。
引っ掛かりそうなポイントとして「15の倍数なら」というところですが、これを処理するために以下の様に言い換えます。
「15で割った余りを求め、その値が0と等しいかどうかを判定する。」

そうすると割った余りを求める演算子は「%」なので、以下の様に作成できます。

これで1つ目の15の倍数の処理は完成です。
残りの処理についてですが、これらはいずれも15の倍数でない時の処理となるので、Branchの「偽(False)」ピンからさらにもう1つBranchを伸ばします。

あとは同様に5の倍数の処理を作成。

さらにBranchを追加して3の倍数の処理を作成して完成です。
(最後の「偽(False)」ピンはNum1とNum2の合計値を表示するようにします。)

■まとめ

今回はブループリントはもちろんのこと、一般的なプログラミングにおいて非常に重要な条件分岐の処理を紹介しました。
この概念とブループリントにおける使用方法は確実に身に付けるようにしましょう。

次回は条件分岐の処理についてもう少し説明する予定です!

■リンク

Unreal Engine4 記事一覧まとめ

ゲーム制作関連のオススメ連載リンク

とっても手軽なゲーム制作体験!
Unityゲーム開発基礎

実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発

Recent News

Recent Tips

Tag Search