フロー評価について

フロー グラフ内のノードは、常に評価されるとは限りません。グラフの評価は、ノードとノードを結ぶ決定論的なイベント チェーンに従いますが、適切なイベントが、適切な出来事に対応して、適切な順序で発生するようにこのチェーンを設定することは困難な場合があります。

このトピックでは、フロー グラフを記述するときに留意する必要がある基本的なルールを示します。

ルール 1: 評価はイベント エミッタから開始する

特定の種類のフロー ノードは、ゲーム内の他の場所で発生したトリガに対応してイベントを発生させます。これらのノードは、一般に入力イベントがない場合でも出力イベントを起動するため、認識可能です。

たとえば、一般に使用されるイベント エミッタ ノードの一部を次に示します。

Event > Trigger ノードには、オン/オフを切り替える入力イベントがあります。このノードが有効な場合は、新しいグラフ評価を開始する新しいイベントを発生することができますが、無効な場合は、イベントを発生しません。

ルール 2: 評価はイベント チェーンに沿って継続される

ノードが入力イベントを受信すると、このイベントはノードの評価をトリガします。このノードが、他のノードの入力ソケットに接続された 1 つまたは複数の出力イベントを生成すると、次のノードとの接続に沿って評価が伝播されます。

接続された出力イベントを含まないノードを評価した場合は、チェーンのこの部分のみが評価されます。別のノードの出力イベント スロットに入力イベント スロットが接続されていないノードは、評価されません。

フロー グラフには、複数のトリガに対応して複数の時刻に評価される、独立した複数のチェーンが存在することがあります。各チェーンは互いに独立しています。

たとえば、このユニット フローには、別の時刻に評価される 3 つの独立したイベント チェーンがあります。このユニットがスポーンされると、HumanIK システムが初期化されて、アクティブになります。特定のボタンをクリックすると、HumanIK の足の接地が有効になります。最後に、右側のグループ内で、キャラクタのアニメーション コントローラがアニメーション中に歩行動作やジャンプのマーカーを検出するたびに、Wwise がトリガされてサウンドが再生されます。

例外: クエリー ノード

クエリー ノードと呼ばれる一部のノードは、ルール 2 に従いません。これらのノードは、他のノードが計算で使用するためにクエリーできる出力データ値を生成します。クエリー ノードが評価されるのは、このクエリー ノードの出力値を 1 つまたは複数使用する別のダウンストリーム ノードが評価されるときのみです。

クエリー ノードは、一般的な評価方向を逆にしたものと見なすことができます。クエリー ノードは、イベントを発生させるアップストリーム ノードによってトリガされないで、出力の 1 つを使用するダウンストリーム ノードによってトリガされます。複数のクエリー ノードが一緒にチェーンされている場合、評価はチェーン内の最初のノードに戻り、再び前方に値が渡されます。

クエリー ノードにはデータ コネクタのみがあり、入力または出力イベントはまったく発生しないため、認識することが可能です。通常、クエリー ノードは変数またはユニットから最新のデータを取得したり、数値演算やブール演算用の値を見つけたり、入力データ値の型を別の型に変換したりする場合に使用します。

次に、イベント接続とクエリー ノードの両方を使用するユニット フロー グラフの例を示します。最初のトリガは、左脚が地面に接地した時点を示すアニメーション コントローラ イベントです。これにより、足跡を表す新しいユニットがスポーンされます。この計算中に、Unit > Spawn Unit on Position ノードは新しいユニットの位置および方向を認識する必要があるため、クエリー ノードのチェーンを遡ってこれらの値を取得します。