ビデオの内容紹介
ForLoop を途中で抜ける方法について、実例を使って説明しています。ごく短い映像チュートリアルです。
原題 Blueprint Essentials – 11 – For Loop with Break
★ForLoop を途中で抜ける方法
『ブループリントの基本的な構成要素⑨ ループ』で作ったグラフを改変していきます。元になるグラフは次のようなものでした。
簡単に振り返っておきますと、ゲームプレイ中に F キーを押すと、ForLoop が発動してループを開始します。ループ本体では Print String (文字列を出力) します (この場合の出力とは、画面上に表示することです)。出力される文字列は、ループの回数 (Index) が入る形式 (フォーマット) になっています。たとえば、The loop has run 10 times. (このループは 10 回実行された) などと表示されます。所定の回数のループ (この場合 100 回) が完了 (Completed) すると、別の Print String が発動して、The loop is done. (このループは完了しました) と表示されて、グラフの実行が終了します。
ビデオでは、これを元にして、ループの途中で抜けて (中断して)、ループが Completed (完了) するように改変していきます。まず、うまく動作しない例を挙げています。
ループ回数を 10,000 回にしています。そして、ForLoop を ForLoopWithBreak (Break 付き ForLoop) に代えています。この Break は、「中断」という意味です。
さっそく V イベントノードを ForLoopWithBreak の Break ピンにつなげています。しかし、これは機能しません。プレイ中に V キーを押しても何も変化しません。
ループを中断するには、ループのまっただ中に (つまり Loop Body に) 中断の契機 (条件) を入れなければならないように ForLoopWithBreak ができているからです。この Break ピンには、中断するきっかけとなるノードを登録しておくという役目があります。
そこで正しいグラフは、次のようになります。(ただし、動作を分かりやすくするために、余分な Print String 関数を付け加えています)
左端の BreakThisLoop は、右クリックメニューの検索欄から Custom Event を探し、それに BreakThisLoop と名付けたものです。
Loop Body には、条件を分岐させています (これは前回の『ブループリントの基本的な構成要素⑩ ループの利用: プロシージャルなレベル デザイン』で詳しく説明されています)。
この部分の意味は、Index が 20 未満の時は True と判定されて、Print Stiring につながっています。この Print String ではループの Index がテキスト化され、The loop has run 19 times. などという形式で表示されます。
Index が 20 以上になると False と判定されて、BreakThisLoop ノードにつながっています。このイベントノードは Break に登録されているので、ここでループを抜けます。
BreakThisLoop ノードからは、別の Print String につながっています (これはビデオ本編にはないのですが動作を分かりやすくするために付け加えました)。この Print String は、「False!!!」とスクリーンに出力します。つまり、ループを抜ける (Break する) 条件である 「Index が 20 未満が False になった (満たされなくなった)」ことを意味しています。結果は次のようになります。
The loop has run 19 times! の直後に False!!! となり、The loop is done! となっていることから分かるように、期待通り、「Index が 20 未満が False になった」段階でループを直ちに抜けて、Completed (完了) ピンにつながっている Print String が実行されている (The loop is done! と表示されている) ことが分かります。
ここで、ForLoopWithBreak の Break ピンの基本について理解を深めるために、実験を行ってみます。次のように BreakThisLoop イベントノードのワイヤをあえて外してみます。
さらに、ブランチノードの False ピンにつながる Print String が 「False! 20 times」というように Index の値が False! とともに表示されるようにしてみました。結果は次のとおりです。
これを見て分かるように、ループは規定の回数である 10,000 回まで回っています。つまり、ループからは抜けませんでした。Break ピンに BreakThisLoop ノードがつながっていないため、それがループを抜ける役目をもっていると認識することができなかったのです。いくら名前が BreakThisLoop となっているからといってもいけません。ちゃんと Break ピンに接続して登録しておかなければならないのです。
今回は以上です。おつかれさまでした!