ブループリントの基本的な構成要素⑪ Break つき ForLoop

ビデオの内容紹介 
ForLoop を途中で抜ける方法について、実例を使って説明しています。ごく短い映像チュートリアルです。

原題 Blueprint Essentials – 11 – For Loop with Break

ForLoop を途中で抜ける方法

『ブループリントの基本的な構成要素⑨ ループ』で作ったグラフを改変していきます。元になるグラフは次のようなものでした。

loopbreak9

簡単に振り返っておきますと、ゲームプレイ中に F キーを押すと、ForLoop が発動してループを開始します。ループ本体では Print String (文字列を出力) します (この場合の出力とは、画面上に表示することです)。出力される文字列は、ループの回数 (Index) が入る形式 (フォーマット) になっています。たとえば、The loop has run 10 times. (このループは 10 回実行された) などと表示されます。所定の回数のループ (この場合 100 回) が完了 (Completed) すると、別の Print String が発動して、The loop is done. (このループは完了しました) と表示されて、グラフの実行が終了します。

ビデオでは、これを元にして、ループの途中で抜けて (中断して)、ループが Completed (完了) するように改変していきます。まず、うまく動作しない例を挙げています。

loopbreak20

ループ回数を 10,000 回にしています。そして、ForLoop を ForLoopWithBreak (Break 付き ForLoop) に代えています。この Break は、「中断」という意味です。

さっそく V イベントノードを ForLoopWithBreak の Break ピンにつなげています。しかし、これは機能しません。プレイ中に V キーを押しても何も変化しません。

ループを中断するには、ループのまっただ中に (つまり Loop Body に) 中断の契機 (条件) を入れなければならないように ForLoopWithBreak ができているからです。この Break ピンには、中断するきっかけとなるノードを登録しておくという役目があります。

そこで正しいグラフは、次のようになります。(ただし、動作を分かりやすくするために、余分な Print String 関数を付け加えています)

loopbreak50

左端の 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 になった (満たされなくなった)」ことを意味しています。結果は次のようになります。

loopbreak51

The loop has run 19 times! の直後に False!!! となり、The loop is done! となっていることから分かるように、期待通り、「Index が 20 未満が False になった」段階でループを直ちに抜けて、Completed (完了) ピンにつながっている Print String が実行されている (The loop is done! と表示されている) ことが分かります。

ここで、ForLoopWithBreak の Break ピンの基本について理解を深めるために、実験を行ってみます。次のように BreakThisLoop イベントノードのワイヤをあえて外してみます。

loopbreak false1

さらに、ブランチノードの False ピンにつながる Print String が 「False! 20 times」というように Index の値が False! とともに表示されるようにしてみました。結果は次のとおりです。

loopbreak false2

これを見て分かるように、ループは規定の回数である 10,000 回まで回っています。つまり、ループからは抜けませんでした。Break ピンに BreakThisLoop ノードがつながっていないため、それがループを抜ける役目をもっていると認識することができなかったのです。いくら名前が BreakThisLoop となっているからといってもいけません。ちゃんと Break ピンに接続して登録しておかなければならないのです。

今回は以上です。おつかれさまでした!



About なつのや

アンリアル・エンジン 4 を基礎から勉強するためのサイト「UE4 の学び部屋」を開いています。どうぞよろしくお願いいたします。
ブループリント

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>