前回までの作業がまだ済んでいない場合は、基本的な使い方から前回までのチュートリアルを先に済ませてください。
今回はSignal Evaluateノードを使用してStateからの遷移の評価判定を行ってみましょう。
内容は以下の通りです。
- Logic Behaviorコンポーネントの付いたGameObjectを作成する。
- Logic Editorウィンドウでグラフを開いて編集する。
- Signal Evaluateノードで時間経過を判定して遷移する。
- 複数の条件判定で遷移する。
シーンを新規作成
他のシーンを開いていると混乱の元となりますので、シーンを新規作成しましょう
- メニューからFile > New Sceneを選択
- New SceneウィンドウでBasic (URP)を選択
- Createボタンをクリック
Logic Behavior付きGameObject作成
シーンにLogic Behaviorコンポーネントが追加された状態のGameObjectを作成します。
- Hierarchyの+ボタンをクリック
- メニューからLogic Toolkit > Logic Behaviorを選択
- 名前はそのまま
Enterキー
で確定。
Logic Editorウィンドウで開く
Logic BehaviorコンポーネントのグラフなどはLogic Editorウィンドウで編集します。
ウィンドウが表示されていない場合は、GameObjectを選択してInspectorの「Edit」ボタンをクリックすることで表示されます。
- Logic Behaviorオブジェクトを選択
- InspectorウィンドウのLogic BehaviorコンポーネントのEditボタンをクリック

すでにLogic Editorウィンドウが表示されている場合は、HierarchyウィンドウでのGameObject選択と連動してグラフが切り替わるようになります。
Stateノードの作成
Stateノードを作成します。
- Startノードの実行出力ポートをドラッグ
- 右側付近でドロップし、ノード作成メニューを開く
- Scriptsタブを選択
- Stateを選択
- ノード名はそのまま
Enterキー
で確定
Signal Evaluateノードの作成
Signal Evaluateノードを作成します。
- Startノードのシグナル出力ポートをドラッグ
- 右側付近でドロップし、ノード作成メニューを開く
- Scriptsタブを選択
- 一覧からSignals > Signal Evaluateを選択
- ノード名はそのまま
Enterキー
で確定
シグナルワイヤーについて
Stateノードのシグナル出力ポートとSignal EvaluateノードのInputsリストのシグナル入力ポートはシグナルワイヤーによって接続されています。
このシグナルワイヤーは、ステートの遷移条件を評価する信号を送るためのワイヤー(接続線)です。

Stateノードのヘッダ部にあるシグナル出力ポートは、Stateノードが実行されている間アクティブになり、接続先のSignal Evaluateノードで遷移条件が評価されます。
前回Stateノードで使用したWait For SecondsやButton.onClickのCompletedポートもこのシグナル出力ポートです。
CompletedポートからシグナルワイヤーでSignal Evaluateノードに接続した場合は、処理が完了した時にシグナルが送信されます。
ひとまず「シグナルが有効になった際にSignal Evaluateノードで遷移するか判定できる」と覚えてください。
Signal EvaluateノードにWait For Secondsを追加
Signal EvaluateノードのConditionsにWait For Secondsを追加します。
- Signal EvaluateノードのConditionsの+ボタンをクリックし、ノードコンポーネント追加メニューを開く
(Stateノードと同じく、マウスオーバーで挿入用の+ボタンも表示されます) - Scriptsタブを選択
- 一覧からTasks > Wait For Secondsを選択
Wait For Secondsの設定
1秒待機するように設定します。
- Secondsフィールドを
1
に設定

Debug.LogのActionノードを作成
1秒経過後にDebug.Logが行われるようにActionノードを作成します。
- Signal Evaluationノードのシグナル出力ポートをドラッグ
- 右側付近でドロップし、ノード作成メニューを開く
- Scriptsタブを選択
- 一覧からActions > Debug > Debug.Logを選択
- ノード名はそのまま
Enterキー
で確定
Debug.Logの設定
Consoleに出力するメッセージを設定します。
- Messageフィールドを
Completed
に設定

ここまでのプレイ確認
ここまでで一度プレイして動作を確認してみましょう。
グラフは以下のようになっています。

プレイボタンを押して挙動を確認します。
- 1秒経過後にConsoleに
Completed
と出力されることを確認。
Consoleウィンドウが表示されていない場合は、メニューからWindow > General > Consoleを選択して表示してください。
Signal EvaluateノードにFloat Compareを追加
Wait For Secondsだけでは、Stateノードに直接使用した場合と違いが分からないかと思います。
そこで遷移条件をさらに追加してみましょう。
今回はConditionsにFloat Compareを追加します。
- Signal EvaluateノードのConditionsの+ボタンをクリックし、ノードコンポーネント追加メニューを開く
(Stateノードと同じく、マウスオーバーで挿入用の+ボタンも表示されます) - Scriptsタブを選択
- 一覧からEvaluators > Float > Float Compareを選択
Float Compareの設定
floatの比較を「NPCの追跡対象との距離」に見立てて「一定範囲内なら真」という判定にしてみましょう。
- Comparison Opフィールドを<= (Less Than Or Equal)に設定
- Value 1フィールドを
10
に設定
(現在の対象との距離を想定) - Value 2フィールドを
5
に設定
(判定範囲を想定)

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

プレイボタンを押して挙動を確認します。
- 1秒経過してもConsoleに出力されないことを確認。
- Float CompareのValue 1フィールドをドラッグして減らし、数値が
5
以下になるとConsoleにCompleted
と出力されることを確認。
Consoleウィンドウが表示されていない場合は、メニューからWindow > General > Consoleを選択して表示してください。
なお、最初からValue 1フィールドを5
以下に設定している場合は、1秒経過後すぐに遷移します。
つまり1秒以上経過かつValue 1フィールドが5
以下の場合に遷移する、という条件になっています。
シグナルの補足
判定の論理演算について
Signal EvaluationノードのInputsフィールドやConditionsフィールドにはInvertとAnd/Orの設定欄もあります。
この設定により複数の判定を組み合わせた複雑な遷移の評価が可能となります。

- Invertを有効にすると、判定結果が反転します。
- Andに設定すると、一つ上までの判定結果と自身の判定結果をAnd演算します。
- Orに設定すると、一つ上までの判定結果と自身の判定結果をOr演算します。
今回の場合はWait For Seconds [AND] Float Compareです。
そのため「1秒経過 [AND] Value 1 <= Value 2」が遷移条件となります。
他のシグナル関連ノードについて
シグナルの判定に使用できるノードは他にも2種類あります。
詳細はマニュアルを参照してください
次回
次回は、「BehaviorTreeノードの使い方」を行います。
試用版でお試しの方は、お気に召しましたらアセットストアにてご購入ください。