NarraLeaf

関数

呼び出し可能な一続きのグラフを宣言し、そこから結果を返し、それが見える場所ならどこからでも呼び出す

fn とは、他のグラフから実行できる、名前の付いた一続きのグラフです。Fn は fn を宣言してそのパラメータを保持し、Fn Return は fn を終了させて結果を返し、Call Fn は fn を呼び出して結果を待ちます。3 つのノードで実現しているのはただ一つの目的です:同じ 8 個のノードを、必要とするウィジェットのたびにコピーし続けるのをやめることです。

規約

  • fn の本体に独自の規則はありません。 そのブループリントが提供するノードであれば、どれでも使えます。
  • fn の正体はヘッドノードであって、名前ではありません。 カード上で名前を変えても、すべての呼び出し元は壊れることなくラベルを付け替えます。同じスコープに同名の fn が 2 つあっても正しく解決され、エディターはその衝突を警告します。名前は人間のためのものであり、束縛は id によって行われるからです。
  • 可視性はオーナーに従います。 globalMain ブループリントで宣言された fn はどこからでも呼び出せます。surfaceMain または widgetMain ブループリントで宣言された fn は、同じ Surface からのみ呼び出せます。その Surface 上の Blueprint Value からも呼び出せます。componentWidgetMain ブループリントで宣言された fn は、同じコンポーネントの定義の内部からのみ呼び出せます。storyAction ブループリントで宣言された fn はすべての Story Action ブループリントで選択肢に表示されますが、呼び出しが届くのは、実行中のシーンに宣言元のブループリントを使う行があるときだけです。Blueprint Value は呼び出せますが宣言はできません。
  • パラメータと結果のピンは作者が定義するものであり、固定ではありません。 Fn と Fn Return は、カード上のボタンからデータピンを増やしていきます。各ピンには名前と、文字列(string)、整数(integer)、数値(float)、真偽値(boolean)、JSON(json)、任意の値(any)のいずれかから選んだ型が付きます。
  • 再帰の上限は 32 フレームです。 それを超えると呼び出しはそのまま失敗します。エディターは、ある fn が直接または別の fn 経由で自分自身を呼び出していることを検知できた時点で警告します。

Fn

blueprint.fn.head

呼び出し可能な fn のヘッドです。exec 入力を持ちません——グラフ内のどこからもこのノードに接続してくるものはありません。誰かがこの fn を呼び出したことで実行が始まり、本体は then にぶら下がります。

ピン方向型備考
thenout · exec—Body というラベルが付きます。呼び出し元がこの fn を呼ぶと実行されます。

カード上のフィールド

フィールド内容
namefn の名前。呼び出し元の Function ドロップダウンに表示されるものです。

Add parameter は、パラメータごとに 1 つのデータ出力ピン(param_N_value)を追加します。それぞれにカード上で設定したラベルと型が付きます。引数は本体が始まる前に注入されるため、本体の最初のノードの時点で、パラメータピンにはすでに呼び出し元の値が入っています。

Fn Return

blueprint.fn.return

fn の本体を終了させ、結果を返します。終端ノードです——exec 出力を持たず、これより後に実行されるものはありません。

ピン方向型備考
inin · exec—

Add return value は、結果ごとに 1 つのデータ入力ピン(ret_N_value)を追加します。結果ピンはカード上のリテラルを一切提供しません:結果は必ず接続された値の出どころから来る必要があり、これによってグラフは返り値がどこで作られたかを常に示せます。

fn のシグネチャは、ヘッドから到達できる最初の Fn Return から取られます。他の分岐にさらに Fn Return があっても、同じ結果を宣言している限り問題ありません——異なる結果を宣言するとエディターがそれらを警告し、呼び出し元には引き続き最初のものだけが見えます。どのヘッドからも到達できない Fn Return にも警告が出ます。

Call Fn

blueprint.fn.call · Latent

見える範囲にある fn を呼び出し、終了を待ちます。Function で対象を選ぶと、カードにパラメータの数だけデータ入力が、結果の数だけデータ出力が生成されます。

ピン方向型備考
inin · exec—
nextout · exec—fn の本体が終了すると続きが実行されます。

カード上のフィールド

フィールド内容
fnRef呼び出す fn。ドロップダウンには、ここから見えるすべての fn が name (scope) の形で表示されます。

これらの引数ピンと結果ピンは、ノード自身に保存された fn のシグネチャ(名前、パラメータ、結果)のコピーから再構築されます。そのため、呼び出し先のブループリントを読み込まなくてもカードを描画できます。型が許す範囲で、引数ピンにはカード上のリテラルを渡せます。

このコピーは fn に追従します。fn のヘッドと同じグラフにある Call Fn は、ヘッドやその Fn Return を変更するとすぐに更新されます。それ以外の場所にある Call Fn は、そのブループリントが次にエディターで開かれたときに更新されます。それまでは古いピンのままで、それらのピンが持つ引数だけを渡し、エディターはそのノードに警告を表示します。Function で fn を選び直すと、その場で更新されます。

本体は呼び出し元の実行の一部として動作します:呼び出し元がキャンセルされると fn もキャンセルされ、本体内で投げられたエラーは Call Fn ノード上に現れます。本体が読み書きするのは fn を宣言したブループリントの変数であり、本体は呼び出し元と同じ場所で動作します。リストの行のイベントから呼び出されればその行を読み、配置されたコンポーネントの内部から呼び出されればその配置のパラメータを読み、その配置の要素を操作します。

Call Fn は latent ノードであり、Blueprint Value のグラフは latent ノードを拒否します——ただしこの 1 つだけは例外です。値プロバイダーは fn を呼び出すことができ、それはホストウィジェットの身元で実行されます。本体が世界に対して行うことの責任は、あなた自身が負うことになります。

このページの目次