Flow と Lua はまったく別のシステムのように見えます。ゲームプレイの作成に使用するワークフローが非常に異なるためです。しかし、あわせて使用できないわけではありません。独自の並列評価コンテキストで、問題なく共存できます。
このページでは、この 2 つのシステムの間でデータの通信とイベントのトリガを行うためのいくつかの方法について説明します。
Lua コードで定義した関数を呼び出すカスタム フロー ノードをプロジェクトで定義することができます。これは 2 つのシステムをつなげる強力で柔軟性の高い方法です。
この設定の詳細については、「Lua でカスタム フロー ノードを作成する」を参照してください。
Script > Script Call Globalノードを使用すると、カスタム ノードを作成しなくても Flow からグローバル Lua 関数を呼び出すことができます。データ コネクタをノードの入力スロットに接続すると、Lua 関数に最大 5 個の引数を渡すことができます。
カスタム ノードとは異なり、この方法には、呼び出した Lua 関数から直接戻り値を取得することができないという欠点があります。Lua の計算をトリガすることはできますが、結果を直接使用することはできません。
詳細については、ノードの説明を参照してください。
Lua スクリプトで定義されている関数を呼び出すかわりに、Lua スクリプトのブロックを直接Script > Script Do String ノードのスクリプト ブロックに入力することができます。ノードの In イベントがトリガされると、コード ブロックがゲームの Lua 環境内で評価されます。
前述のように、コード ブロックには最大 5 つの引数を渡すことができます。前述のように、Lua コードは、Flow グラフに直接イベントを返すことができません。
詳細については、ノードの説明を参照してください。
Flow グラフと Lua スクリプトにより、共有「外部」変数のデータ値の設定と読み取りができます。各レベルのレベル フローと各ユニットのユニット フローには、それぞれ異なる外部変数が格納されます。
これらの「外部」変数は、他のフロー グラフにのみ表示される Variable カテゴリ内のフロー ノードを使用して取得および設定できる変数とは同じではないことに注意してください。
レベル フローまたはユニット フロー、またはエンティティ フローで外部変数を設定するには、External > Output カテゴリのノードを使用します。たとえば、External > Output > External Output Boolean を使用して、true または false の値を設定します。
フロー グラフで設定されている外部変数を読み取るには、stingray.Level.flow_variable()、stingray.Unit.flow_variable() または stingray.FlowComponent.flow_variable() を呼び出します。
Lua からレベル フロー グラフ、ユニット フロー グラフ、またはエンティティ フロー グラフに外部変数を設定するには、stingray.Level.set_flow_variable()、stingray.Unit.set_flow_variable()、または stingray.FlowComponent.set_flow_variable() を呼び出します。
Lua スクリプトによって設定されている外部変数を読み取るには、External > Input カテゴリのノードを使用します。たとえば、External > Input > External Input Boolean を使用して、true または false の値を取得します。
Lua のコードは任意の時点でレベル フローまたはユニット フロー グラフでイベントを実行することができます。
たとえば、次の Lua コードを実行するとします。
stingray.Level.trigger_event(myLevel, "explosion")
次のようにして、レベル フローに対応します。
注: Level.trigger_level_loaded()、Level.trigger_level_update()、Level.trigger_level_shutdown() の各関数を使用してこれらのイベントをレベル フローで実行することもできます。ただし、Appkit を使用してプロジェクトのレベルを管理している場合は、これらのトリガが自動的に実行されます。