PCおよびXBox 360開発用のC#で動作するLua APIはありますか?[閉まっている]


18

ゲーム開発に関する本を読んでいます。Luaでゲームのスクリプトを作成する方法を示しています。彼らはLuaをプログラムしてC ++から使用しますが、C#からLuaを使用するライブラリまたはAPIがあるのではないかと考えていました。特にXNAからPC および XBox 360 向けのゲームを開発するには?


5
ちょっとした小さなつまようじですが、LUA(頭字語、あれやあなたが叫んでいる)ではなく、Lua(名前)です
-RCIX

Luaの「About」ページから:「Luaは、CおよびC ++だけでなく... C#...で書かれたプログラムを拡張するために使用されています。」「C#でのlua」に関するGoogleの最初の結果は、GameDev.net(gamedev.net/reference/articles/article2275.asp)の「C#でLuaを使用する」という興味深い記事です。
リバーブ

多くの.net開発者は、スクリプトにironpythonまたはironrubyを使用します。
食い物

回答:


6

これは私があなたを指し示すものでした(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/


3
ここにいくつかの良い点があります。考えておくべきことの1つは、ゲームがC#で記述されているのに、なぜスクリプト言語が必要なのかということです。通常、C ++はコンパイルに時間がかかるため、C ++エンジンはスクリプト言語を使用することで多くの俊敏性を得ることができます。この点では、C#は非常に高速です。何らかの理由でスクリプトを実行時にコンパイルする場合は、常にCodeDom(またはその他のコード生成メソッド)を使用してロード時にCSファイルをコンパイルできますが、これはPCでのみ機能します。これについては、「ゲームエンジンツールセット開発」
-Cubed2Dの

^^ Game Engine Toolset Developmentは素晴らしい本です:)。今は少し時代遅れですが、概念はまだしっかりしています。.NETスクリプト言語のバインディングの問題は、Xbox 360で実行するために、ほとんど解釈する必要があることです。System.Reflection.Emitがなければ、コード生成の方法で多くのことを行うことはできません。これらの機能は近いうちにXbox 360に搭載されると思われましたが、以下の返信でのコメントの議論に基づいて、おそらくそうではありません。このように、Xbox 360の上のスクリプトのパフォーマンスは、おそらくそれほど大きく:(ではありません。
マイク・ストローベル

@ Cubed2D:Luaはスクリプトゲームの業界標準の一種であり、プロではないプログラマーにとっても理解しやすいものです。
RCIX

@Mike your right、can can compile or generate code on 360.これを実装しようとしても、360でc#スクリプトをサポートせず、PCツールセット機能として使用するだけです。vsプロジェクトを微調整して、360ビルドにscriptフォルダーを含め、pcビルドには無視します。@RCIXは他のみんながやるからといって、そうすべきだという意味ではありません。Xnaを使用したい場合、その価値よりも問題が発生します。luaを実装しようとしている.netの世界の非プログラマーに調整可能なパラメーターを公開するより良い方法があります(プログラマーではないプログラマーのコメントであなたが得ていると仮定するもの)
Cubed2D

@ Cubed2D:それは良い点ですが、ターゲットプラットフォームに本当に依存します。PC専用に作成している場合は、LuaInterfaceとネイティブlua dllを使用できます。実装を作成する必要はありません。その上、ポイントは、ゲーム開発の世界でそのような支持者があるため、その環境に適した機能を自然に開発しているということです。さらに、私はLuaを介してプログラミングを始めましたが、多くの人がそうしたことは間違いないと思います。
RCIX

2

C#でスクリプトを作成する場合は、間違いなくIronPythonをご覧ください。これはC#のpython APIだけでなく、実際にはC#と同じCLRアセンブリ(同じパフォーマンス)にコンパイルされる完全に独立したpython実装ですが、スクリプト言語としてインターフェイスできます。C#のLuaラッパーは、マーシャリングのオーバーヘッドのために非常に遅くなります。


2

ショーンが言ったように、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で実行しても問題ないことを想像します。


4
IronPythonの唯一の問題は、xbox360では動作しないことです。PCのみで使用する場合は問題ありません。IronPytonはSystem.Reflection.Emitを多く使用しますが、Xboxの.net Frameworkでは使用できません。
ElementCy

非常に良い点。更新しました。
マイクストロベル

2
xboxがReflectionを取得していると思わないでください。winPhoneにはxnaとsilverlightの両方があり、その名前空間をサポートしていないため、すぐに送信してください
Cubed2D

1
あなたは正しいかもしれません。WP7は実際にはSilverlightを実行しませんが、.NETではなく.NET CFに基づいた「Silverlight Mobile Compact Framework」を実行します。Xbox 360は完全な.NET Frameworkの代わりに.NET CFも実行するため、WP7の実装と同様の実装になる可能性が高いと思います。しかたがない。
マイクストロベル

2

私があなたに提供できる最善の解決策は、C#でスクリプトを作成することです。ウィンドウをターゲットにすると、実行時にそれらをコンパイルし、xbox用に事​​前にコンパイルできます。(dllとして)

それが最も簡単な解決策です。VB.NETまたは任意の.NET言語でも実行できます。(ただし、スクリプトについてはわかりません)基本的に、スクリプトを独自のdllに含めるように言っています。Windowsで実行時にコンパイルすることができます。(xbox 360でこれを本当にしてほしいですか?そこにあるゲームを更新することはできません。少なくともそうは思わないでしょう)

私はあなたのフラストレーションを理解できます。私もLuaを使いたかったのです。

まとめると:1)Windowsのランタイムでビルドする2)Xbox 360用に事前にビルドする

それが私がお勧めすることです。


1
  1. Luaインタープリターはアンマネージドであるため、XNAを使用してXboxで動作させることはできません

  2. DLRに依存せず、Xbox動作するJintというJavascriptインタープリターを使用できます(http://jint.codeplex.com/


ここにLua <-> C#のリンクがいくつかあるので、最初のポイントは真実ではないと言いました。
共産主義のダック

Xboxでのみマネージコードを実行できます。Lua <-> C#ブリッジはアンマネージコードであり、マネージコードからLuaを呼び出すことができます。MSがXNAまたはXbox 360 OSに含めるまで、そこで実行することはできません。

0

技術的にあなたの質問に答えることはありません(xboxでは動作しません)が、LuaInterfaceは比較的簡単に LuaとC#の統合を可能にします。


0

この質問を更新するために、私は最後の日を徹底的に検索し、UniLua(単一の純粋なC#実装で使用するために作られた)を使用することが、XboxでLuaを取得するための最良かつ最も効果的なオプションであることがわかりました。私はそれを取り除いて、Unityの資料をすべて取り出しました。

また、LuaStateの[]演算子をオーバーロードするなどして、LuaInterfaceにある機能を追加しました。

CFWLua

これがお役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.