Gibt es eine Lua-API, die mit C # für PC & XBox 360 Development funktioniert? [geschlossen]

18

Ich lese gerade ein Buch über Spieleentwicklung, in dem sie Ihnen zeigen, wie Sie Skripte für Ihr Spiel in Lua erstellen. Sie programmieren Lua und verwenden es aus C ++, aber ich fragte mich, ob es eine Bibliothek oder API gibt, um Lua aus C # zu verwenden: speziell aus XNA, um Spiele für PC und XBox 360 zu entwickeln?

alFador
quelle
5
Eine Art kleiner Nitpick, aber es ist Lua (ein Name), nicht LUA (ein Akronym, das oder Sie schreien)
RCIX
Von der Seite "Über" von Lua: "Lua wurde verwendet, um Programme zu erweitern, die nicht nur in C und C ++, sondern auch in ... C # ... geschrieben wurden." Erstes Ergebnis von Google für "lua in C #" war ein interessanter Artikel von GameDev.net ( gamedev.net/reference/articles/article2275.asp ) Verwendung von Lua mit C # betitelte.
Hall
Viele .NET-Entwickler verwenden Ironpython oder Ironruby für die Skripterstellung.
Ripped Off

Antworten:

6

Dies ist, wo ich Sie hinweisen würde (http://www.xnua.com/xna_lua_xnua), aber es wurde für eine lange Zeit nicht aktualisiert.

C # ist eine großartige Sprache und kann in gewisser Weise als Skriptsprache in Ihrem C # -Spiel verwendet werden. Nick Gravelyn hat einige nette Tutorials über die Kachel-Engine (http://blog.nickgravelyn.com/downloads/#tileengine) erstellt und eine benutzerdefinierte Skript-Engine verwendet, um den Dialog auszulösen. Er hat auch ein grundlegendes Beispiel, als er über das Schlüsselwort "yield" erfuhr: http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/

ElementCy
quelle
3
Einige gute Punkte hier. Eine Sache, über die Sie nachdenken sollten, ist, warum Sie eine Skriptsprache wollen, wenn Ihr Spiel in c # geschrieben ist. C ++ - Engines können durch die Verwendung einer Skriptsprache erheblich an Flexibilität gewinnen, da die Kompilierung von C ++ in der Regel viel Zeit in Anspruch nimmt. C # ist in dieser Hinsicht sehr schnell. Wenn Sie aus irgendeinem Grund möchten, dass Ihre Skripte zur Laufzeit kompiliert werden, können Sie zum Kompilieren einer CS-Datei beim Laden immer CodeDom (oder eine andere Codegenerierungsmethode) verwenden, dies funktioniert jedoch nur auf dem PC. Es gibt ein Kapitel dazu im Buch "Game Engine Toolset Development"
Cubed2D
^^ Game Engine Toolset Development ist ein schönes Buch :). Es ist ein bisschen veraltet, aber die Konzepte sind immer noch solide. Das Problem bei .NET-Skriptsprachenbindungen ist, dass sie zum Ausführen auf der Xbox 360 so ziemlich interpretiert werden müssen. Ohne System.Reflection.Emit können Sie bei der Codegenerierung nicht viel tun. Ich hatte den Eindruck, dass diese Funktionen in naher Zukunft für die Xbox 360 verfügbar sein werden, aber auf der Grundlage der Kommentardiskussion in meiner Antwort unten ist dies wahrscheinlich nicht der Fall. Daher wird die Skriptleistung auf der Xbox 360 wahrscheinlich nicht so großartig sein :(.
Mike Strobel
@ Cubed2D: Lua ist eine Art Industriestandard für Skriptspiele und auch für nichtprofessionelle Programmierer leichter zu verstehen.
RCIX
@Mike Ihr Recht, kann Code auf dem 360 kompilieren oder generieren. Wenn ich dies implementieren würde, würde ich C # -Skripte auf 360 einfach nicht unterstützen und habe es einfach als eine PC-Toolset-Funktion. Optimieren Sie einfach das vs-Projekt, um den Skriptordner in einem 360-Build einzuschließen, und ignorieren Sie ihn auf einem PC. @ RCIX, nur weil es alle anderen tun, heißt das nicht, dass Sie es tun sollten. Wenn Sie Xna verwenden möchten, wird es mehr Ärger geben als es wert ist. Es gibt bessere Möglichkeiten tweakable Parameter nicht Programmierer in der .net Welt zu entlarven versucht lua zu implementieren (was ich nehme an, Sich immer an mit Ihrem nicht pro-Programmierer Kommentar)
Cubed2D
@ Cubed2D: Das ist ein guter Punkt, aber es hängt wirklich von Ihrer Zielplattform ab. Wenn Sie nur für den PC schreiben, können Sie LuaInterface und die native lua-DLL verwenden und müssen keine Implementierung schreiben. Außerdem ist der Punkt, dass es natürlich entwickelte Funktionen hat, die es gut für diese Umgebung machen, da es eine solche Anhängerschaft in der Welt der Spieleentwicklung hat. Außerdem habe ich meinen Hauptstart in der Programmierung durch Lua gemacht, und ich wette, viele Leute haben es getan, also ist es verständlich, warum die Leute es benutzen wollen.
RCIX
2

Wenn Sie nach Skripten in C # suchen, schauen Sie sich auf jeden Fall IronPython an . Es ist nicht nur eine Python-API für C #, sondern eine vollständig separate Python-Implementierung, die mit derselben CLR-Assembly (mit derselben Leistung) kompiliert wird wie C #, die jedoch als Skriptsprache verwendet werden kann. Jeder Lua-Wrapper für C # wäre aufgrund des Overheads von Marshalling sehr langsam.

Sean Edwards
quelle
2

Wie Sean sagte, ist IronPython einen Blick wert. IronPython ist eine der wenigen Implementierungen dynamischer Sprachen für .NET, die auf die Dynamic Language Runtime (DLR) abzielen. Es gibt mindestens ein Open-Source-Projekt, das auf die Implementierung von Lua im DLR abzielt (wie dieses ), aber ich bin nicht sicher, ob es Implementierungen gibt, die kurz vor dem Abschluss stehen. Ein gut implementierter Satz von DLR-Bindungen für Lua sollte eine Leistung auf dem Niveau von IronPython und IronRuby bieten und wäre viel schneller als ein Lua-Wrapper. Zum Vergleich: IronPython bietet im Allgemeinen eine bessere Leistung als CPython (manchmal sogar eine deutlich bessere).

Hinweis: Wie in ElementCy unten angegeben, werden DLR-Sprachen auf der Xbox 360 im Allgemeinen nicht unterstützt. Im DLR gibt es jedoch einen "interpretierten Modus". Ich weiß nicht genug darüber, um es sicher zu sagen, aber es könnte möglich sein, IronPython (oder andere DLR-Sprachimplementierungen) auf der Xbox 360 im interpretierten Modus laufen zu lassen, obwohl die Leistung sicherlich darunter leiden würde. Es könnte sich lohnen, jemanden im DLR-Team zu fragen, ob er weiß, dass dies möglich ist. Andernfalls sollte die Xbox 360 Reflection.Emit-Unterstützung als Teil der bevorstehenden Silverlight-Unterstützung erhalten. In diesem Fall kann ich mir vorstellen, dass es kein Problem ist, den DLR auf der Xbox 360 zum Laufen zu bringen.

Mike Strobel
quelle
4
Einziges Problem mit IronPython, es läuft nicht auf der xbox360. Es ist in Ordnung, wenn Sie es nur für den PC verwenden möchten. IronPyton verwendet viel System.Reflection.Emit, und das ist auf dem .net Framework der Xbox nicht verfügbar.
ElementCy
Ein sehr guter Punkt. Aktualisiert.
Mike Strobel
2
Denken Sie nicht, dass xbox Reflection bekommt. Senden Sie es in Kürze, da winPhone sowohl xna als auch silverlight hat und diesen Namespace nicht unterstützt
Cubed2D 14.07.10
1
Da könntest du recht haben. In WP7 wird nicht Silverlight ausgeführt, sondern "Silverlight Mobile Compact Framework", das auf .NET CF anstelle von .NET basiert. Ich glaube, dass die Xbox 360 auch .NET CF anstelle des vollständigen .NET Frameworks ausführt, sodass es wahrscheinlich zu einer ähnlichen Implementierung wie in WP7 kommen wird. Naja.
Mike Strobel
2

Die beste Lösung, die ich Ihnen geben kann, ist, nur ein Skript in C # zu erstellen. Sie können sie zur Laufzeit kompilieren, wenn Sie auf Windows abzielen, und sie vorab für die Xbox kompilieren. (als dll)

Das wäre die einfachste Lösung. Sie können dies auch in VB.NET oder einer anderen .NET-Sprache tun. (Ich bin mir jedoch nicht sicher, was die Skripte angeht.) Grundsätzlich sage ich, dass Ihre Skripte in einer eigenen DLL enthalten sein sollen. Sie können sie zur Laufzeit unter Windows kompilieren lassen. (Wollen Sie wirklich, dass sie dies auf der Xbox 360 tun? Sie können Ihre Spiele dort nicht aktualisieren, zumindest glaube ich nicht)

Ich kann deine Frustration verstehen, ich wollte auch Lua benutzen.

Um es zusammenzufassen: 1) Haben Sie es zur Laufzeit unter Windows erstellt. 2) Erstellen Sie es vor der Hand für die Xbox 360

Das empfehle ich.

Michael Coleman
quelle
1
  1. Der Lua-Interpreter ist nicht verwaltet, AFAIK. Sie können ihn also nicht für Xbox mit XNA verwenden

  2. Sie können den Javascript- Interpreter Jint verwenden, der nicht auf DLR basiert und auf Xbox funktioniert ( http://jint.codeplex.com/ ).

wizzard0
quelle
Ich hätte gesagt, der erste Punkt ist falsch, da es hier mehrere Links gibt, die Lua <-> C # haben.
Die kommunistische Ente
Sie können nur verwalteten Code auf der Xbox ausführen. Eine Lua <-> C # -Brücke ist nicht verwalteter Code, mit dem Sie Lua über verwalteten Code aufrufen können. Sie können es dort nicht ausführen, bis MS es in XNA oder dem Xbox 360-Betriebssystem einschließt.
0

Es beantwortet Ihre Frage technisch nicht (funktioniert auf der Xbox nicht), aber LuaInterface ermöglicht die Integration von Lua in C # relativ problemlos .

RCIX
quelle
0

Um diese Frage auf den neuesten Stand zu bringen, habe ich den letzten Tag mit umfangreichen Suchanfragen verbracht und festgestellt, dass die Verwendung von UniLua (für die Verwendung mit Unity, reine C # -Implementierung) die beste und effektivste Option ist, um Lua auf Xbox zu bekommen. Ich habe es abgespeckt, das gesamte Unity-Material herausgenommen und es funktioniert großartig.

Ich habe auch einige Funktionen in LuaInterface hinzugefügt, indem der [] -Operator für LuaState überladen wurde, und so weiter.

CFWLua

Ich hoffe das war nützlich.

Bradley Galloway
quelle