ゲーム開発に関する本を読んでいます。Luaでゲームのスクリプトを作成する方法を示しています。彼らはLuaをプログラムしてC ++から使用しますが、C#からLuaを使用するライブラリまたはAPIがあるのではないかと考えていました。特にXNAからPC および XBox 360 向けのゲームを開発するには?
ゲーム開発に関する本を読んでいます。Luaでゲームのスクリプトを作成する方法を示しています。彼らはLuaをプログラムしてC ++から使用しますが、C#からLuaを使用するライブラリまたはAPIがあるのではないかと考えていました。特にXNAからPC および XBox 360 向けのゲームを開発するには?
回答:
これは私があなたを指し示すものでした(http://www.xnua.com/xna_lua_xnua)が、長い間更新されていません。
C#は素晴らしい言語であり、ある意味でC#ゲーム内のスクリプト言語として使用できます。Nick Gravelynは、タイルエンジン(http://blog.nickgravelyn.com/downloads/#tileengine)に関する素晴らしいチュートリアルを作成し、カスタムスクリプトエンジンを使用してダイアログを起動しました。また、「yield」キーワードについて知ったときの基本的な例もあります:http : //blog.nickgravelyn.com/2010/02/the-magic-of-yield/
C#でスクリプトを作成する場合は、間違いなくIronPythonをご覧ください。これはC#のpython APIだけでなく、実際にはC#と同じCLRアセンブリ(同じパフォーマンス)にコンパイルされる完全に独立したpython実装ですが、スクリプト言語としてインターフェイスできます。C#のLuaラッパーは、マーシャリングのオーバーヘッドのために非常に遅くなります。
ショーンが言ったように、IronPythonは一見の価値があります。IronPythonは、実際には、動的言語ランタイム(DLR)を対象とする.NET用の数少ない動的言語実装の1つです。DLRにLuaを実装することを目的とした少なくとも1つのオープンソースプロジェクトがあります(このような)が、完成に近い実装があるかどうかはわかりません。LuaのDLRバインディングの適切に実装されたセットは、IronPythonおよびIronRubyと同等のパフォーマンスを提供し、Luaラッパーよりもはるかに高速です。比較のために、IronPythonは一般にCPythonよりも優れたパフォーマンスを発揮します(場合によっては大幅に向上します)。
注: ElementCyが以下に述べるように、DLR言語は通常Xbox 360ではサポートされていません。ただし、DLR には「解釈モード」があります。確かに言うほど十分なことはわかりませんが、IronPython(または他のDLR言語の実装)をインタープリターモードでXbox 360で実行できる可能性がありますが、パフォーマンスは確かに低下します。DLRチームの誰かにこれが可能であることを知っているかどうかを尋ねる価値があるかもしれません。そうでない場合、Xbox 360 は、今後のSilverlightサポートの一部としてReflection.Emitサポートを取得する必要があります。その場合、DLRを起動してXbox 360で実行しても問題ないことを想像します。
私があなたに提供できる最善の解決策は、C#でスクリプトを作成することです。ウィンドウをターゲットにすると、実行時にそれらをコンパイルし、xbox用に事前にコンパイルできます。(dllとして)
それが最も簡単な解決策です。VB.NETまたは任意の.NET言語でも実行できます。(ただし、スクリプトについてはわかりません)基本的に、スクリプトを独自のdllに含めるように言っています。Windowsで実行時にコンパイルすることができます。(xbox 360でこれを本当にしてほしいですか?そこにあるゲームを更新することはできません。少なくともそうは思わないでしょう)
私はあなたのフラストレーションを理解できます。私もLuaを使いたかったのです。
まとめると:1)Windowsのランタイムでビルドする2)Xbox 360用に事前にビルドする
それが私がお勧めすることです。
Luaインタープリターはアンマネージドであるため、XNAを使用してXboxで動作させることはできません
DLRに依存せず、Xboxで動作するJintというJavascriptインタープリターを使用できます(http://jint.codeplex.com/)
技術的にあなたの質問に答えることはありません(xboxでは動作しません)が、LuaInterfaceは比較的簡単に LuaとC#の統合を可能にします。
この質問を更新するために、私は最後の日を徹底的に検索し、UniLua(単一の純粋なC#実装で使用するために作られた)を使用することが、XboxでLuaを取得するための最良かつ最も効果的なオプションであることがわかりました。私はそれを取り除いて、Unityの資料をすべて取り出しました。
また、LuaStateの[]演算子をオーバーロードするなどして、LuaInterfaceにある機能を追加しました。
これがお役に立てば幸いです。