前回までの作業がまだ済んでいない場合は、基本的な使い方から前回までのチュートリアルを先に済ませてください。
今回はIfノードを使用して分岐を行ってみましょう。
内容は以下の通りです。
- メンバーアクセスで乱数取得で作成したシーンを開く
- Logic Editorウィンドウでグラフを開いて編集する。
- Float CompareのComputeノードで乱数を判定
- Ifノードで分岐
「メンバーアクセスで乱数取得」のシーンを開く
メンバーアクセスで乱数取得で行った内容を変更しますので、シーンを開いてください。
- ProjectsウィンドウのAssets / MemberAccessシーンをダブルクリックして開く
シーンを別名で保存
改変したMemberAccessシーンを上書きしてしまうと混乱の元となりますので、あらかじめ別名で保存しておきましょう。
- メニューからFile > SaveAs…を選択
- Assetsフォルダを選択
If
という名前で保存
Logic Editorウィンドウを開く
Logic BehaviorコンポーネントのグラフなどはLogic Editorウィンドウで編集します。
ウィンドウが表示されていない場合は、GameObjectを選択してInspectorの「Edit」ボタンをクリックすることで表示されます。
- Logic Behaviorオブジェクトを選択
- InspectorウィンドウのLogic BehaviorコンポーネントのEditボタンをクリック

すでにLogic Editorウィンドウが表示されている場合は、HierarchyウィンドウでのGameObject選択と連動してグラフが切り替わるようになります。
Float CompareのComputeノードを作成
Random.valueの結果を判定するためのノードを作成します。
- Random.valueのValueポートをドラッグ
- 右側付近のグラフビュー上へドロップし、ノード作成メニューを開く
- Scriptsタブを選択
- 検索バーに
Float Comapre
と入力 - 一覧からComputeノード用のFloat Compareを選択
(検索しない場合はComputes > Float > Float Compare) - ノード名はそのまま
Enter
キーで確定
Float Compareの設定
今回も50%の確率で分岐したいと思います。
- Value 2フィールドを
0.5
に設定 - Comparison Opフィールドを
< (Less Than)
に設定

Resultポートの接続先へIfノードを作成
Float Compareの結果を使用して分岐できるようにします。
- Float CompareのResultポートをドラッグ
- もともとあったDebug.Logの右側付近でドロップし、ノード作成メニューを開く
- Scriptsタブを選択
- 一覧からFlow Controls > Ifを選択
Ifノードについて
IfノードはConditionsを上から順に判定し、条件に合致した要素を実行するノードです。

上から順に各条件を判定し、条件に合致場合はThenポートの接続先を実行します。
どの条件も満たさない場合は、Elseポートの接続先を実行します。
分岐先の実行が終了したらCompletedポートの接続先に遷移します。
今回の場合は、Random.valueが0.5
未満かどうかを判定しThenポートを実行、それ以外であればElseポートを実行。完了後にCompletedポートの接続先に遷移します。
Debug.LogとIfの接続
もともとあったDebug.LogのActionノードからIfノードに遷移するように設定します。
- Debug.LogのActionノードの遷移出力ポートをドラッグ
- Ifノードの実行入力ポートにドロップ
Thenポートの接続先にDebug.Logを作成
判定結果が真の場合の分岐先でConsoleに出力しましょう。
- IfノードのThenポートをドラッグ
- 右側付近でドロップし、ノード作成メニューを開く
- Scriptsタブを選択
- 一覧からActions > Debug > Debug.Logを選択
- ノード名はそのまま
Enter
キーで確定
Then側Debug.Logの設定
Consoleに表示する文字列を設定します。
- Messageフィールドを
True
に設定

Elseポートの接続先にDebug.Logを作成
判定結果が偽の場合の分岐先でConsoleに出力しましょう。
- IfノードのElseポートをドラッグ
- 右側付近でドロップし、ノード作成メニューを開く
- Scriptsタブを選択
- 一覧からActions > Debug > Debug.Logを選択
- ノード名はそのまま
Enter
キーで確定
Else側Debug.Logの設定
Consoleに表示する文字列を設定します。
- Messageフィールドを
Otherwise
に設定

Completedポートの接続先にDebug.Logを作成
Ifノードの各分岐先の処理が終わったときもConsoleに出力しましょう。
- IfノードのCompletedポートをドラッグ
- 右側付近でドロップし、ノード作成メニューを開く
- Scriptsタブを選択
- 一覧からActions > Debug > Debug.Logを選択
- ノード名はそのまま
Enter
キーで確定
Completed側Debug.Logの設定
Consoleに表示する文字列を設定します。
- Messageフィールドに
Completed
と入力

Get Random.valueの再演算の問題の解消
Get Random.valueの再演算モードをFrameに変更します。
再演算の問題についてはBranchノードで分岐の説明を参照してください。
設定すると以下のように再演算モードが緑のアイコンに切り替わります。

プレイして確認
ここまで作成するとグラフは以下のようになっています。

プレイボタンを押して挙動を確認します。
- Consoleウィンドウに
0.0
から1.0
までの間の数値が表示されることを確認。
(ここまではMemberAccessシーンの内容) - 乱数値が
0.5
未満の場合にTrue
と表示されることを確認。 - 乱数値が
0.5
以上の場合にOtherwise
と表示されることを確認。 - いずれかの結果が表示された後に
Completed
と表示されることを確認。 - 何回かプレイモードを切り替えて結果が変わることを確認。

Consoleウィンドウが表示されていない場合は、メニューからWindow > General > Consoleを選択して表示してください。
Branchノードとの違い
Branchノードでは1つの条件判定により、TrueかFalseのどちらかに遷移するという単純なものでした。
IfノードはConditionsの要素を追加でき、複雑な条件分岐ができます。
また各条件分岐先が実行完了するとCompletedポートの接続先に遷移する機能もあります。
Ifノードの方が高機能ですが、単純な分岐の方が分かりやすい場合もあるかと思います。
お好みで使分けてください。
再スタートするには?
Branchノードでは分岐後に合流して共通処理を行いたい場合は分岐先で意図的に合流させる必要がありました。
Ifノードでは条件分岐先の処理が完了するとCompletedポートの接続先に遷移しますので分岐処理完了後の共通処理が行えます。
Branchと同じく繰り返し再スタートする例を挙げると以下のようになります。

次回
次回は、For Intノードでループを行います。
試用版でお試しの方は、お気に召しましたらアセットストアにてご購入ください。