スイッチ ノード
スイッチ ノードがデータ入力を読み取り、その入力値に基づいて一致する (あるいはオプションのデフォルト) 実行出力から実行フローを送ります。スイッチには、Int、String、Name、Enum があります。
通常、スイッチには実行入力と、評価対象データの種類にあわせたデータ入力が付いています。出力はすべて実行出力です。Enum スイッチは、Enum のプロパティから自動的に出力実行ピンを作成します。一方、Int、String、Name の各スイッチの出力実行ピンはカスタマイズが可能です。
スイッチノードを編集する
Int、String、あるいは Name スイッチノードをブループリントに追加する場合に使用できる出力実行ピンは Default ピンのみです。入力値が他に指定した出力ピンのいずれにも一致しないと、Default 出力実行ピンが発行されます。削除するには、ピンを右クリックしスイッチノードの [Details (詳細)] タブで [Remove Execution Pin (実行ピンを削除)] を選択するか、[Has Default Pin (デフォルトピンを付ける)] オプションのチェックを外します。
Int スイッチの編集
-
[Graph (グラフ)] タブのスイッチノードを選択し、[Details (詳細)] タブにプロパティを表示します。
-
Start Index を確認したい最低整数値に変更します。
-
スイッチノードの [Add Pin (ピンを追加)] をクリックし、 Start Index 値でピンを追加します。
[Add Pin (ピンを追加)] をクリックしてさらにピンを追加します。1 回の増加幅は 1 です。実行ピンを削除するには、ピンを右クリックし [Remove Execution Pin (実行ピンを削除)] を選択します。Switch on Int ノードの出力実行ピンを取り除くと、ギャップを埋めるために値の高いピンの値が 1 に下がります。
Name または String スイッチの編集
-
[Graph (グラフ)] タブのスイッチノードを選択し、[Details (詳細)] タブにプロパティを表示します。
-
ピン名 の右の アイコンをクリックします。
-
表示されたテキストボックスの中に String あるいは Name と比較したい値を入力します。
同じプロセスを繰り返して他のピンも追加します。[Details (詳細)] タブのお好きなピンで アイコンをクリックすれば、ピンのコピー、挿入、削除が可能です。実行ピンを削除する場合は、ピンを右クリックして [Remove Execution Pin (実行ピンを削除)] を選択します。
Standard Flow Control ノード
これらのノードにより様々な方法で実行のフローを制御することができます。
Branch
Branch ノードは単一の True/False 条件の決定に基づいて簡単なフローを作成します。実行されると、 Branch ノードはアタッチされた Boolean の入力値に基づいて、適切な出力へ実行パルスを送り込みます。
この例では、ブランチは Boolean 変数の現在の状態をチェックしています。True の場合、ライトの色は赤に設定されます。False の場合、ライトの色は青に設定されます。
項目 | 説明 |
---|---|
入力ピン | |
(Unlabeled) | この実行入力はブランチのチェックをトリガーします。 |
Condition | トリガーされる出力ピンを表示する Boolean 値を受け取ります。 |
出力ピン | |
True | 入力条件が true の場合、実行パルスを出力します。 |
False | 入力条件が false の場合、実行パルスを出力します。 |
DoN
DoN ノードは実行パルスを N 回発行します。限界に達した後、パルスが Reset 入力に送りこまれるまで全ての実行の送信を停止します。
例えば、ビークル開始を 20 回発行することはできますが、Reset 入力に結びついたイベントの燃料補給がアクティベートするまで開始することはできません。
項目 | 説明 |
---|---|
入力ピン | |
Enter | DoN のチェックをトリガーする実行入力です。 |
n | DoN ノードがトリガーする回数を設定する入力です。 |
Reset | DoN ノードが再度トリガーされるようにリセットする実行入力です。 |
出力ピン | |
Exit | DoN がまだ N 回以上トリガーされていないか、あるいはリセット入力が呼び出された場合のみトリガーされる実行ピンです。 |
DoOnce
DoOnce ノードは、名前から想像ができるように、実行パルスを 1 回のみ発行します。それ以降は、パルスが リセット 入力へ送りこまれるまで実行の送信を停止します。このノードは N = 1 の DoN ノードに相当します。
例えば、DoOnce でドアを開くためにネットワークを動かすことができますが、そのドアは 1 回だけしか開きません。ただし、トリガーイベントをリセットに結びつければ、トリガーがアクティベートされた時にドアへのアクセスが可能になります。
項目 | 説明 |
---|---|
入力ピン | |
(Unlabeled) | この実行入力は DoOnce チェックをトリガーします。 |
Reset | DoOnce ノードが再度トリガーされるようにリセットする実行入力です。 |
出力ピン | |
Completed | DoOnce がまだトリガーされていないか、リセット入力が呼び出された場合のみトリガーされる実行ピンです。 |
FlipFlop
FlipFlop ノードは実行出力を受け取り、 2 つの実行出力を切り替えます。最初の呼び出しで、出力 A が実行されます。2 回目は B です。そして、A 、 B 、となります。ノードには出力 A が呼ばれた時に追跡を可能にする boolean 出力もついています。
項目 | 説明 |
---|---|
入力ピン | |
(Unlabeled) | FlipFlop をトリガーする実行入力です。 |
出力ピン | |
A | FlipFlop がトリガーされた後、最初と奇数回に呼び出される出力ピンです。 |
B | FlipFlop がトリガーされた後、2 回目と偶数回に呼び出される出力ピンです。 |
Is A | 出力 A がトリガーされているかどうかを表す boolean 値を出力します。実際には FlipFlop ノードがトリガーされるたびに true と false を切り替えます。 |
ForLoop
ForLoop ノードは、標準的なコードのループのように、開始と終了の間の各インデックスに対し実行パルスを発行します。
下記の簡単なサンプルではプレーヤーがシンプルなレベル トリガーに触れるとループがトリガーされます。ループは都度 Print String を呼び出しながら 10 回反復し、現在のイタレーションと一緒に、メッセージのプレフィックスのログを取ります。
フレーム間でループ イテレーションが起こるので、ループが大きいとパフォーマンス ヒットが生じます。
項目 | 説明 |
---|---|
入力ピン | |
(Unlabeled) | ループを起動する実行入力です。 |
First Index | ループの最初のインデックスを表す Int を受け取ります。 |
Last Index | ループの最後のインデックスを表す Int を受け取ります。 |
出力ピン | |
Loop Body | インデックス間を移動するので、ループのイタレーションごとに実行パルスを出力します。 |
Index | 現在のループインデックスを出力します。 |
Completed | for loop が完了すると発行する標準の実行出力ピンです。 |
ForLoopWithBreak
ForLoopWithBreak ノードは、ループを終了することができる入力ピンをもつ点を除いて、ForLoop ノードと非常によく似た動きをします。
下記の簡単なサンプルではプレーヤーがシンプルなレベル トリガーに触れるとループがトリガーされます。ループは 1000 回イテレートしますが、毎回 Branch をヒットしてループが 500 回イテレートしたかを確認します。 500 回に達していない場合、現在のイタレーション数についてメッセージが画面に流れます。500回を超えると、Branch がカスタム イベントを呼び出し、ループが終了します。映像を明確にし、Break 入力ピンをぐるりと回ってワイヤーラップする必要性をなくすために、カスタムイベントを使用します。
フレーム間でループ イテレーションが起こるので、ループが大きいとパフォーマンス ヒットが生じます。
項目 | 説明 |
---|---|
入力ピン | |
(Unlabeled) | ループを起動する実行入力です。 |
First Index | ループの最初のインデックスを表す Int を受け取ります。 |
Last Index | ループの最後のインデックスを表す Int を受け取ります。 |
Break | この実行入力はループを終了します。 |
出力ピン | |
Loop Body | インデックス間を移動するので、ループのイタレーションごとに実行パルスを出力します。 |
Index | 現在のループインデックスを出力します。 |
Completed | for loop が完了すると発行する標準の実行出力ピンです。 |
Gate
Gate ノードは、実行のストリームを開閉するための手段として使用されます。入力するだけで、Enter 入力が実行パルスを受け取り、ゲートの現在の状態 (開く、または閉じる) はこれらのパルスが Exit 出力から渡されているのか否かを決定します。
下図の例では、トラックのないタイムラインが 自動再生とループを両方アクティベートした状態でゲートの Enter 入力ピンを更新します。レベルにはトリガーが 2 つあります。1 つのトリガーがゲートを開き、もう 1 つのトリガーがゲートを閉じます。ゲートが開いていれば、パルスは Exit ピンを出て、メッセージを画面にログする Print String が呼び出されます。プレーヤーが Close (閉じる) トリガーに触れると、ゲートが閉まり、メッセージの表示が停止します。プレーヤーが今度は Open (開く) トリガーに触れると、メッセージの表示が再開します。
項目 | 説明 |
---|---|
入力ピン | |
Enter | この実行入力は、実行がゲートで制御されていることを表します。 |
Open | ゲートのステートを オープン にし、実行パルスが Exit 出力ピンへ渡るようにする実行ピンです。 |
Close | ゲートのステートを クローズ にし、 実行パルスが Exit 出力ピンから渡されないようにする実行ピンです。 |
Toggle | ゲートの現在の状態を逆にする実行ピンです。 オープン が逆に クローズ になります。 |
Start Closed | ゲートの開始状態を判断する boolean 入力です。 true に設定されている場合、ゲートはクローズの状態で開始します。 |
出力ピン | |
Exit | ゲートの状態が現在 オープン の場合、実行パルスが Enter 入力ピンをヒットするとパルスが Exit 出力ピンを離れます。ゲートが クローズ の場合、 Exit ピンは機能しません。 |
MultiGate
MultiGate は単一データパルスを受け取り、それを出力の可能性のあるところ全てに送ります。ランドスケープに裂け目が生成され、ループする場合もあれば、しない場合もあります。
下図は、単一ループで 0.5 秒ごとの自動再生タイムラインによるパルス出力のサンプルです。このパルスが MultiGate をヒットし適切に送られ、 Print String ノードの内の 1 つをトリガーします。結果、順番で再生されている場合は特別なメッセージが表示されます。
項目 | 説明 |
---|---|
入力ピン | |
(Unlabeled) | MultiGateにより送信される必要があるパルスを全て受け取る主要な実行入力です。 |
Reset | -1 の時、現在の出力インデックスのデフォルトを 0 に戻す、または現在の設定されている Start Index に設定します。 |
Is Random | 設定が true の場合、 出力の順番はランダムに選択されます。 |
Loop | 設定が true の場合、出力はループで継続的に繰り返されます。false の場合、全ての出力が使用されてしまうと MultiGate は機能を停止します。 |
Start Index | Int を受け取り、MultiGate が最初に使用する出力インデックスを表示します。-1 の値は開始点を指定しない場合と同じ値です。 |
出力ピン | |
Out # | 各出力は、送信された実行パルスを送信するために MultiGate が使用できる出力ピンを表します。 |
Add pin | 実際は出力ピンではないですが、好きなだけ出力を追加できるボタンです。出力を削除するには、 右クリック して「出力ピンを取り除く」を選択します。 |
Sequence
Sequence ノードは単一実行パルスで、一連のイベントを順番にトリガーすることを可能にします。ノードには好きなだけ出力をつけることができ、Sequence ノードが入力を受け取ると全ての出力が呼び出されます。出力は常に順番に、しかも遅延なく呼び出されます。普通ユーザーには、出力が同時にトリガーされているように見えます。
このサンプルでは、シーケンス ノードはレベルの最初に呼び出されます。そして順番に 5 つの Print String を発行します。ただし、故意に遅らせることがなければ、それぞれのメッセージの表示はほぼ同時に見えます。
項目 | 説明 |
---|---|
入力ピン | |
(Unlabeled) | Sequence により送信される必要があるパルスを全て受け取る主要な実行入力です。 |
出力ピン | |
Out # | 各出力は、送信された実行パルスを送信するために Sequence が使用できる出力ピンを表します。 |
Add pin | 実際は出力ピンではないですが、好きなだけ出力を追加できるボタンです。出力を削除するには、 右クリック して「出力ピンを取り除く」を選択します。 |
WhileLoop
テスト条件とボディが WhileLoop を構成します。ボディで処理文を実行する前に、ブループリントは true かどうかを判断するために WhileLoop のテスト条件を評価します。ボディで処理文を実行した後、ブループリントはテスト条件を再評価します。条件が true のままであれば、ループのボディで処理文を実行し続けます。テスト条件が false を返す場合、ブループリントはループを終了し、ループのボディを終了します。
以下の表はノードピンの説明です。
項目 | 説明 |
---|---|
入力ピン | |
(Unlabeled) | WhileLoop を操作する全てのパルスを受け取る主要な実行入力ピンです。 |
Condition | ループのテスト条件です。 |
出力ピン | |
Loop Body | インデックス間を移動するので、ループのイタレーションごとに実行パルスを出力します。 |
Completed | ループが終了するとすぐに発行する標準実行出力です。 |
ベストプラクティス: WhileLoop の使用の際にはこれらの質問を考えてみてください。
-
ループの終了条件は何か?
-
ループの最初のテストの前に条件は初期化されているか?
-
条件を再度テストする前に、各ループサイクルで条件は更新されているか?condition again?
これらの質問に答えることで、ゲームに無応答 (あるいはクラッシュ) を発生させる無限ループを避けることができます。
使用例
以下は、WhileLoop ボディに入り Counter が Count Limit よりも少ないか評価する前に (2) ブループリントが Start WhileLoop
をビューポートに出力している例です(1)。テスト条件 (2) が true
の場合、Counter Value: [Counter]
をビューポートに印字する前にブループリントは WhileLoop ボディに留まり、カウンタ integer をインクリメントします (3)。テスト条件 (2) が false
の場合、ブループリントは WhileLoop ボディを終了し、 WhileLoop Completed
をビューポートに印字します。