前回までの作業がまだ済んでいない場合は、基本的な使い方から前回までのチュートリアルを先に済ませてください。
今回はStateノードを使用して状態管理を行ってみましょう。
内容は以下の通りです。
- Logic Behaviorコンポーネントの付いたGameObjectを作成する。
 - Logic Editorウィンドウでグラフを開いて編集する。
 - Stateノードで時間内にButtonのクリックを検知する。
 
シーンを新規作成
他のシーンを開いていると混乱の元となりますので、シーンを新規作成しましょう
- メニューから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キーで確定 
Stateノードとは
Stateノードは、オブジェクトの状態を表すノードです。
例えば、敵のNPCの行動では「巡回&索敵状態」、「対象追跡状態」、「対象に攻撃状態」などが考えられます。
Logic ToolkitのStateノードでは、ActionComponentやTaskComponent、EventComponentなどを組み合わせて同時に実行することで状態を管理できます。
StateにWait For Secondsを追加
StateノードにWait For Secondsを追加します。
- StateノードのComponentsの+ボタンをクリックし、ノードコンポーネント追加メニューを開く
 - Scriptsタブを選択
 - 一覧からTasks > Wait For Secondsを選択
 
Wait For Secondsの設定
ここでは5秒待機するように設定します。
- Secondsフィールドを
5に設定 

Debug.LogのActionノードの作成
Wait For SecondsのCompletedからDebug.Logに遷移します。
- Wait For SecondsのCompletedポートをドラッグ
 - 右側付近でドロップし、ノード作成メニューを開く
 - 一覧からActions > Debug > Debug.Logを選択
 - ノード名はそのまま
Enterキーで確定 
Debug.Logの設定
Consoleに出力する文字列を設定します。
- Messageフィールドを
Time outに設定 

Restartノードの作成
Debug.Logの次にRestartノードで最初に戻るように設定します。
- Debug.LogのActionノードの遷移出力ポートをドラッグ
 - 右側付近でドロップし、ノード作成メニューを開く
 - Scriptsタブを選択
 - 一覧からFlow Controls > Restartを選択
 
StateにButton.onClickを追加
続いて、StateノードにButton.onClickを追加します。
- Stateノードの下辺をマウスオーバーすることで表示された+ボタンをクリックし、ノードコンポーネント追加メニューを開く
 - Scriptsタブを選択
 - 検索欄に
Button.onClickと入力 - 一覧からButton.onClickを選択
 
Stateノードには複数のNodeComponentを設定できるため、ノード用コンポーネントを途中に挿入できる機能が備わっています。
先頭、NodeComponent同士の間、一番最後のそれぞれのスペースをマウスオーバーすると挿入用の+ボタンが表示されます。
またComponentsの+ボタンは一番最後に追加されます。
お好きな方をご利用ください。
ScriptsタブにButton.onClickがない場合
前回の「Eventノードでトリガー待ち受け」にてスクリプト生成をしているため、前回の内容を行っていない場合は以下の方法でButton.onClickを追加してください。
- Stateノードの下辺をマウスオーバーすることで表示された+ボタンをクリックし、ノードコンポーネント追加メニューを開く
 - Membersタブを選択
 - 検索欄に 
Button.onClickと入力 - 一覧から
UnityEngine.UI.ButtonのonClickを選択 - コンパイルが終わるのを待つ
 
Buttonの作成
シーンにButtonを作成します。
- Hierarchyの+ボタンをクリック
 - メニューからUI > Button – TextMeshProを選択
 - もしTMP Importerウィンドウが表示されたらImport TMP Essentialsをクリック
 
Button.onClickの設定
作成したButtonを設定します
- TargetフィールドをButtonに設定
(参照タイプをSelfからValueに変更してからオブジェクトフィールドを設定するか、HierarchyのButtonオブジェクトをTargetフィールドにドラッグ&ドロップすることで設定できます) 

Debug.LogとRestartを複製
既に作成しているDebug.LogとRestartをコピー&ペーストします。
- Debug.LogのActionノードとRestartノードを選択
 Ctrl C(Win)、⌘ C(Mac)を入力- Button.onClickのCompletedポートの右側付近で
Ctrl V(Win)、⌘ V(Mac)を入力 
遷移ワイヤーの接続
Button.onClickと複製したDebug.LogのActionノードを接続します。
- Button.onClickのCompletedポートをドラッグ
 - 複製したDebug.LogのActionノードの実行入力ポートにドロップ
 
Debug.Logの設定
Consoleに出力する文字列を設定します。
- Messageフィールドを
Clickedに設定 

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

プレイボタンを押して挙動を確認します。
- 5秒待機して、Consoleに
Time outと出力されることを確認。 - Buttonをクリックすると、Consoleに
Clickedと出力されることを確認。 
Consoleウィンドウが表示されていない場合は、メニューからWindow > General > Consoleを選択して表示してください。
Stateについての補足
Stateノードは、ActionノードやTaskノードなどと同じく実行ワイヤーか遷移ワイヤーを接続することで実行できます。
基本的な扱いはActionやTaskと変わりありませんので、「Action→State→Task→If→State」などのように実行フローの中にそのままStateが組み込めます。
次回
次回は、Signal EvaluateノードでState遷移の評価を行います。
試用版でお試しの方は、お気に召しましたらアセットストアにてご購入ください。
