前回までの作業がまだ済んでいない場合は、基本的な使い方から前回までのチュートリアルを先に済ませてください。
今回は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遷移の評価を行います。
試用版でお試しの方は、お気に召しましたらアセットストアにてご購入ください。