For Intノードでループ

前回までの作業がまだ済んでいない場合は、基本的な使い方から前回までのチュートリアルを先に済ませてください。

今回はFor Intノードを使用して処理の繰り返しを行ってみましょう。
内容は以下の通りです。

  • Logic Behaviorコンポーネントの付いたGameObjectを作成する。
  • Logic Editorウィンドウでグラフを開いて編集する。
  • For Intノードでループ

シーンを新規作成

他のシーンを開いていると混乱の元となりますので、シーンを新規作成しましょう

  • メニューから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選択と連動してグラフが切り替わるようになります。

For Intノードの作成

For Intノードを作成します。

  • Startノードの実行出力ポートをドラッグ
  • 右側付近でドロップし、ノード作成メニューを開く
  • Scriptsタブを選択
  • 一覧からFlow Controls > For Intを選択

For Intノードについて

For Intノードは繰り返し処理を行うためのノードです。

Start Valueフィールドの値から順にValueポートに現在の値を出力し、現在の値が条件に合致していればBodyポートの接続先の実行します。
Bodyポートの接続先の実行が完了すると、現在の値にAmountフィールドの値を加算し、条件が合致している間はBodyポートの接続先の実行を繰り返します。

条件やAmountフィールドの設定によっては無限ループにもなりますのでご注意ください。
ただし無限ループになってもフリーズしない仕組みになっていますのでご安心ください。

For Intの他にもFor LongやFor Floatなど、扱う数値型が異なるバージョンも用意されております。
必要に応じて他のノードを使用してください。

For Intノードの設定

今回は10回繰り返すようにします。

  • Comparison Valueフィールド10に設定

Bodyポートの接続先にDebug.Logを作成

ループ中の本体処理を作成します。

  • For IntノードのBodyポートをドラッグ
  • 右側付近でドロップし、ノード作成メニューを開く
  • Scriptsタブを選択
  • 一覧からActions > Debug > Debug.Logを選択
  • ノード名はそのままEnterキーで確定

ValueポートとMessageポートの接続

For Intノードの繰り返し中の現在の値をConsoleに表示させるため、ポートを接続します。

  • For IntノードのValueポートをドラッグ
  • Debug.LogのMessageポートにドロップ

メンバーアクセスで乱数取得でも説明しましたが、接続すると自動的に間に作成されるノードはConvertノードです。
今回はFor IntノードのValueのint型をMessageのstring型に変換するためのToStringノードが作成されています。

Debug.Logの接続先にWait For Secondsを作成

Debug.Logだけですと一瞬で繰り返し処理が終わってしまいますので、一定時間待機します。

  • Debug.LogのActionノードの遷移出力ポートをドラッグ
  • 右側付近でドロップし、ノード作成メニューを開く
  • Scriptsタブを選択
  • 一覧からTasks > Wait For Secondsを選択
  • ノード名はそのままEnterキーで確定

Wait For Secondsの設定

1秒間待機するように設定します。

  • Secondsフィールド1に設定

繰り返し完了のDebug.Logを作成

繰り返しが終わったこともConsoleに出力しましょう。

  • For IntノードのCompletedポートをドラッグ
  • 右側付近でドロップし、ノード作成メニューを開く
  • Scriptsタブを選択
  • 一覧からActions > Debug > Debug.Logを選択
  • ノード名はそのままEnterキーで確定

繰り返し完了のDebug.Logの設定

Consoleに表示する文字列を設定します。

  • MessageフィールドCompletedと入力

プレイして確認

ここまで作成するとグラフは以下のようになっています。

プレイボタンを押して挙動を確認します。

  • Consoleに0から9まで1秒間隔で表示されることを確認。
  • 最後にCompletedと表示されることを確認。

Consoleウィンドウが表示されていない場合は、メニューからWindow > General > Consoleを選択して表示してください。

10が表示されない理由はComparison OPフィールド< (Less Than)だからです。
Valueが10になるとValue < 10が偽となるため繰り返し処理から抜けます。

フロー終了系ノード

For Intノードなどの繰り返し用ノードには、特殊なフロー終了系ノードが用意されています。
ここではFor Intノードに関連する終了ノードを一通り紹介します。
複雑な繰り返し処理を行う場合に必要に応じて使用してください。

Exitノード

Exitノードは通常の終了ノードです。
遷移先ノードがない場合は自動的にExitノードと同じように実行終了するため、基本的には省略可能です。

For IntノードのBodyで使用した場合、Valueを更新し条件を満たす限りBodyの最初から繰り返します。
Valueが条件を満たさない場合はCompletedポートの接続先に遷移します。

Continue

ContinueノードはFor Intなどの繰り返し用ノード専用の終了ノードです。
Bodyの先にIfノードなどがある場合、ExitノードではIfノードの条件分岐の終了処理に使われてしまうため、Exitの代わりにContinueノードを使用することで次の繰り返しに移行できます。

For IntノードのBodyで使用した場合、Valueを更新し条件を満たす限りBodyの最初から繰り返します。
Valueが条件を満たさない場合はCompletedポートの接続先に遷移します。

Break

Breakノードは繰り返しを抜けるノードです。

For IntノードのBodyで使用した場合、そこでBodyの繰り返しを終了しCompletedポートの接続先に遷移します。

Restart

Restartノードは、無条件に実行を再スタートするノードです。

For IntノードのBodyで使用した場合、Valueを更新せずにBodyの最初から繰り返します。

For Intノードに限らず実行ポートの接続先であれば無条件に再スタートします。
例えばFor IntノードのBody→IfノードのThen→Restartという接続の場合、Restartに到達するとIfノードのThenポートの接続先が再スタートします。

おわり

今回で基本的な使い方は終了です。

他にも簡単なゲームを作成する実践的なチュートリアルもありますので、ぜひ試してみてください。
チュートリアル一覧はこちら

試用版でお試しの方は、お気に召しましたらアセットストアにてご購入ください。