プロジェクトの Lua スクリプトで C コードを実行するように設定できます。これはパフォーマンスが重要である場合に効果的です。通常、C で記述された関数は、Lua の同等の関数よりも高速で実行されるためです。さらに、サードパーティ製ライブラリを統合したり、別のアプリケーション用に記述された既存の C コードを再利用するために、この方法を使用できます。
これを実行する場合、次のようないくつかのオプションがあります。
C コードで「バインド」を作成し、C ライブラリをロードするときに Lua 環境で C 関数と変数を公開することができます。これは、ユーザ独自のカスタム コード、およびサードパーティ製ライブラリで定義された関数に対しても実行することができます。詳細については、「カスタム バインドを使用して Lua と C を連携させる」を参照してください。
一部のサードパーティ製ライブラリでは、Lua のバインドが既に利用可能な場合があります。これらはライブラリ作成者によって作成されるか、オープンソース ライブラリの場合はコミュニティによって作成されることがあります。事前作成された Lua のバインドが含まれるライブラリを入手できた場合は、そのまま使用できる場合もあります。ただし通常は、Stingray で使用される LuaJIT ライブラリの同じバージョンにリンクさせるために、そのライブラリを再コンパイルする必要があります。Lua バインドの記述方法の手順を省略して、「カスタム バインドを使用して Lua と C を連携させる」を参照してください。
特殊なバインドのない単純な C ライブラリをロードするために LuaJIT FFI ライブラリを使用して、その関数を Lua 環境から直接呼び出すことができます。「LuaJIT FFI ライブラリを使用して Lua を C に拡張する」を参照してください。
すべての場合において、C コードをダイナミック リンク ライブラリにコンパイルし、ランタイムのロードでエンジンがそのライブラリを使用できるようにする必要があります。
注: このセクションの内容は、以前に C コードの記述とコンパイルの経験があるプログラマに推奨するものです。バインド レイヤの管理や、FFI ライブラリの使用に関連する型変換などの複雑さが加わらないとしても、C それ自体が初心者にとっては習熟が難しいものです。
ダイナミック リンクをサポートし、LuaJIT にダイナミックにリンクするプラットフォームをゲームがターゲットとしている場合にのみ、ダイナミック リンク ライブラリ内で C コードを実行できます。
ダイナミック リンクをサポートしていないプラットフォームで C コードを実行する必要がある場合、またはこのセクションのトピックで説明したいずれかの方法を使用しても Lua からコードを機能させることができない場合は、Stingray エンジンで公開されているプラグイン API を使用するという、もうひとつの方法があります。
この場合、現時点では Stingray ソース リポジトリにアクセスする必要があります。詳しくはオートデスクの担当者にお問い合わせください。また、『Stingray 開発者用ヘルプ』も参照してください。