Flow と Lua の間で通信する

Flow と Lua はまったく別のシステムのように見えます。ゲームプレイの作成に使用するワークフローが非常に異なるためです。しかし、あわせて使用できないわけではありません。独自の並列評価コンテキストで、問題なく共存できます。

このページでは、この 2 つのシステムの間でデータの通信とイベントのトリガを行うためのいくつかの方法について説明します。

カスタム フロー ノードを使用する

Lua コードで定義した関数を呼び出すカスタム フロー ノードをプロジェクトで定義することができます。これは 2 つのシステムをつなげる強力で柔軟性の高い方法です。

この設定の詳細については、「Lua でカスタム フロー ノードを作成する」を参照してください。

Flow からグローバル Lua 関数を呼び出す

Script > Script Call Globalノードを使用すると、カスタム ノードを作成しなくても Flow からグローバル Lua 関数を呼び出すことができます。データ コネクタをノードの入力スロットに接続すると、Lua 関数に最大 5 個の引数を渡すことができます。

カスタム ノードとは異なり、この方法には、呼び出した Lua 関数から直接戻り値を取得することができないという欠点があります。Lua の計算をトリガすることはできますが、結果を直接使用することはできません。

詳細については、ノードの説明を参照してください。

Flow で Lua コードを直接入力する

Lua スクリプトで定義されている関数を呼び出すかわりに、Lua スクリプトのブロックを直接Script > Script Do String ノードのスクリプト ブロックに入力することができます。ノードの In イベントがトリガされると、コード ブロックがゲームの Lua 環境内で評価されます。

前述のように、コード ブロックには最大 5 つの引数を渡すことができます。前述のように、Lua コードは、Flow グラフに直接イベントを返すことができません。

詳細については、ノードの説明を参照してください。

「外部」の入力と出力によりデータを交換する

Flow グラフと Lua スクリプトにより、共有「外部」変数のデータ値の設定と読み取りができます。各レベルのレベル フローと各ユニットのユニット フローには、それぞれ異なる外部変数が格納されます。

これらの「外部」変数は、他のフロー グラフにのみ表示される Variable カテゴリ内のフロー ノードを使用して取得および設定できる変数とは同じではないことに注意してください。

フローから Lua にデータを渡す

Lua からフローにデータを渡す

Lua からフロー イベントをトリガする

Lua のコードは任意の時点でレベル フローまたはユニット フロー グラフでイベントを実行することができます。

たとえば、次の Lua コードを実行するとします。

stingray.Level.trigger_event(myLevel, "explosion")

次のようにして、レベル フローに対応します。

注: Level.trigger_level_loaded()Level.trigger_level_update()Level.trigger_level_shutdown() の各関数を使用してこれらのイベントをレベル フローで実行することもできます。ただし、Appkit を使用してプロジェクトのレベルを管理している場合は、これらのトリガが自動的に実行されます。