前回までの作業がまだ済んでいない場合は、基本的な使い方から前回までのチュートリアルを先に済ませてください。
今回は、前回取得した乱数を判定しBranchノードで分岐をしてみましょう。
内容は以下の通りです。
- メンバーアクセスで乱数取得で作成したシーンを開く
- Logic Editorウィンドウでグラフを開いて編集する。
- Float CompareのComputeノードで乱数を判定
- Branchノードで分岐
「メンバーアクセスで乱数取得」のシーンを開く
前回のメンバーアクセスで乱数取得で行った内容を変更しますので、前回のシーンを開いていない場合は開いてください。
- ProjectsウィンドウのAssets / MemberAccessシーンをダブルクリックして開く
シーンを別名で保存
改変したMemberAccessシーンを上書きしてしまうと混乱の元となりますので、あらかじめ別名で保存しておきましょう。
- メニューからFile > SaveAs…を選択
- Assetsフォルダを選択
Branch
という名前で保存
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は2つのfloat型の値を比較して結果をbool型で出力します。
Float Compareの設定
今回は50%の確率で分岐したいと思います。
- Value 2フィールドを
0.5
に設定 - Comparison Opフィールドを
< (Less Than)
に設定

Resultポートの接続先へBranchノードを作成
Float Compareの結果を使用して分岐できるようにします。
- Float CompareのResultポートをドラッグ
- もともとあったDebug.Logの右側付近でドロップし、ノード作成メニューを開く
- Scriptsタブを選択
- 一覧からFlow Controls > Branchを選択
Branchノードについて
BranchノードはConditionフィールドのbool値が真か偽かによって遷移先を分岐するノードです。

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

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

Get Random.valueの再演算の問題の解消
ここまででグラフの接続は完成しましたが、この状態でプレイ開始するとConsoleに出力された数値と判定結果が異なる問題が発生します。

0.7376851
が0.5
以上なのにTrue
になっていたり、0.3688646
が0.5
未満なのにFalse
になっており想定の動作になっていません。
なお、0.0441331
は0.5
未満でありTrue
で正しいのですが偶然正しくなっただけです。
これは、Get Random.valueが毎回異なる乱数を取得することと、ActionノードとBranchノードの実行時にGet Random.valueがそれぞれ1回ずつ計2回呼ばれていることが原因です。

この問題を解消する方法はいくつかありますが、今回はGet Random.valueをフレーム単位で再演算するモードに設定します。
- Get Random.valueの再演算モードをクリック
- メニューからFrameを選択
設定すると以下のように再演算モードが緑のアイコンに切り替わります。

ActionノードでGet Random.valueを使用する方法もあります。
StartノードからGet Random.valueのActionノードに接続すればRandom.valueを1回だけ出力し同じ値を使用できるようになります。
プレイして確認
ここまで作成するとグラフは以下のようになっています。

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

Consoleウィンドウが表示されていない場合は、メニューからWindow > General > Consoleを選択して表示してください。
再スタートするには?
この例では確認するには何度もプレイモードの切り替えが必要です。
Restartノードで最初に戻るで行ったように、Wait For SecondsとRestartノードを使用することで1秒経過後に再スタートさせることができます。
ただし、Branchは分岐後に自動的に合流されません。
もし分岐の結果によらずどちらの実行を行っても最終的に再スタートしたい場合は、両方のルートに個別に同じノードを作成するか合流してからノードを作成する必要があります。
作業手順の詳細は省きますが、以下のようにすると合流して1秒経過後に再スタートするようになります。

Random Evaluateの紹介
今回のような乱数値の比較はよく使用するため、機能をまとめたRandom Evaluateというコンポーネントも組み込まれています。
Branchノードの条件判定にRandom Evaluateを使用する場合は以下のようになります。
(乱数値の出力は行われないため、Debug.Logなどの他ノードで数値は使用できません)

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