Apakah ada Lua API yang berfungsi dengan C # untuk Pengembangan PC & XBox 360? [Tutup]

18

Saya membaca buku tentang Pengembangan Game di mana mereka menunjukkan kepada Anda bagaimana membuat skrip untuk permainan Anda di Lua. Mereka memprogram Lua dan menggunakannya dari C ++, tapi saya bertanya-tanya apakah ada perpustakaan atau API untuk menggunakan Lua dari C #: khusus dari XNA untuk mengembangkan game untuk PC dan XBox 360?

alFador
sumber
5
Semacam nitpick kecil, tapi itu Lua (nama), bukan LUA (akronim, itu atau Anda berteriak)
RCIX
Dari halaman "Tentang" Lua: "Lua telah digunakan untuk memperluas program yang ditulis tidak hanya dalam C dan C ++, tetapi juga dalam ... C # ...". Hasil pertama dari Google untuk "lua di C #" adalah artikel yang menarik dari GameDev.net ( gamedev.net/reference/articles/article2275.asp ) berjudul Menggunakan Lua dengan C #.
reverbb
Banyak .net devs menggunakan ironpython atau ironruby untuk skrip.
Ripped Off

Jawaban:

6

Inilah yang saya tunjukkan kepada Anda (http://www.xnua.com/xna_lua_xnua), tetapi belum diperbarui untuk waktu yang lama.

C # adalah bahasa yang bagus, dan bisa digunakan sebagai bahasa skrip dalam game c # Anda. Nick Gravelyn telah membuat beberapa tutorial yang bagus tentang mesin genteng (http://blog.nickgravelyn.com/downloads/#tileengine) dan menggunakan mesin skrip khusus untuk mematikan dialog. Dia juga memiliki contoh dasar ketika dia belajar tentang kata kunci "hasil": http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/

ElementCy
sumber
3
Beberapa poin bagus di sini. Satu hal yang perlu dipikirkan, mengapa Anda ingin bahasa scripting saat gim Anda ditulis dalam c #? Mesin C ++ bisa mendapatkan banyak ketangkasan dari menggunakan bahasa scripting, karena C ++ biasanya membutuhkan waktu lama untuk dikompilasi. C # sangat cepat dalam hal ini. Jika karena alasan tertentu Anda ingin skrip Anda dikompilasi pada saat runtime, Anda selalu dapat menggunakan CodeDom (atau metode pembuatan kode lainnya) untuk mengkompilasi file CS pada waktu buka, tetapi ini hanya akan berfungsi pada PC. Ada bab tentang ini dalam buku "Pengembangan Game Engine Toolset"
Cubed2D
^^ Pengembangan Game Engine Toolset adalah buku yang bagus :). Agak ketinggalan zaman sekarang, tetapi konsepnya masih solid. Masalah dengan binding bahasa scripting NET adalah bahwa, untuk menjalankan pada Xbox 360, bahwa mereka cukup banyak harus ditafsirkan. Tanpa System.Reflection.Emit, Anda tidak bisa berbuat banyak dalam hal pembuatan kode. Saya mendapat kesan bahwa kemampuan ini akan datang ke Xbox 360 dalam waktu dekat, tetapi berdasarkan diskusi komentar di balasan saya di bawah ini, ini mungkin tidak terjadi. Dengan demikian, kinerja skrip di Xbox 360 mungkin tidak akan terlalu bagus :(.
Mike Strobel
@ Cubed2D: Lua adalah semacam standar industri untuk permainan skrip, dan juga lebih mudah untuk dipahami oleh programmer non-profesional.
RCIX
@Mike kanan Anda, dapat mengkompilasi atau menghasilkan kode pada 360. Jika saya akan menerapkan ini saya tidak akan mendukung skrip c # pada 360, dan hanya memilikinya sebagai fitur toolset pc. Hanya men-tweak proyek vs untuk memasukkan folder skrip pada 360 build dan abaikan pada satu pc. @RCIX hanya karena semua orang melakukannya, jangan berarti Anda harus melakukannya. Jika Anda ingin menggunakan Xna, ini akan lebih merepotkan daripada nilainya. Ada cara yang lebih baik untuk mengekspos parameter tweakable ke non programmer di dunia .net mencoba menerapkan lua (apa yang saya asumsikan Anda dapatkan dengan komentar non pro-programmer Anda)
Cubed2D
@ Cubed2D: Itu poin yang bagus, tapi itu sangat tergantung pada platform target Anda. jika Anda menulis hanya untuk PC, maka Anda dapat menggunakan LuaInterface dan asli lua dll, dan tidak harus menulis implementasi. Selain itu, intinya adalah karena memiliki pengikut di dunia pengembangan gim, maka fitur yang dikembangkan secara alami akan membuatnya baik untuk lingkungan itu. Selain itu, saya mendapatkan permulaan utama saya dalam pemrograman melalui Lua, dan saya bertaruh banyak orang melakukannya, jadi bisa dimengerti mengapa orang ingin menggunakannya.
RCIX
2

Jika Anda mencari skrip di C #, lihat IronPython . Ini bukan hanya API python untuk C #, itu sebenarnya implementasi python yang benar-benar terpisah yang mengkompilasi ke perakitan CLR yang sama (dengan kinerja yang sama) yang dilakukan C #, tetapi dapat dihubungkan dengan sebagai bahasa scripting. Setiap pembungkus Lua untuk C # akan jauh lebih lambat karena overhead dari Marshalling.

Sean Edwards
sumber
2

Seperti kata Sean, IronPython layak untuk dilihat. IronPython sebenarnya adalah salah satu dari beberapa implementasi bahasa dinamis untuk .NET yang menargetkan Dynamic Language Runtime (DLR). Setidaknya ada satu proyek open source yang bertujuan mengimplementasikan Lua pada DLR (seperti ini ), tapi saya tidak yakin apakah ada implementasi yang hampir selesai. Set binding DLR yang diimplementasikan dengan baik untuk Lua harus memberikan kinerja yang setara dengan IronPython dan IronRuby, dan akan jauh lebih cepat daripada pembungkus Lua. Demi perbandingan, IronPython umumnya berkinerja lebih baik daripada CPython (terkadang jauh lebih baik).

Catatan: Sebagai ElementCy menyatakan bawah, bahasa DLR umumnya tidak didukung pada Xbox 360. Namun, ada adalah sebuah "modus ditafsirkan" di DLR. Saya tidak cukup tahu tentang hal itu untuk mengatakan dengan pasti, tetapi mungkin saja untuk mendapatkan IronPython (atau implementasi bahasa DLR lainnya) untuk berjalan di Xbox 360 dalam mode yang ditafsirkan, meskipun kinerjanya pasti akan menderita. Mungkin ada baiknya bertanya kepada seseorang di tim DLR apakah mereka tahu ini mungkin. Jika tidak, Xbox 360 harus mendapatkan dukungan Reflection.Emit sebagai bagian dari dukungan Silverlight mendatang. Jika dan ketika itu terjadi, saya membayangkan mendapatkan DLR dan berjalan di Xbox 360 tidak akan menjadi masalah.

Mike Strobel
sumber
4
Hanya masalah dengan IronPython, itu tidak akan berjalan di xbox360. Tidak apa-apa jika Anda ingin menggunakannya hanya untuk PC. IronPyton menggunakan System.Reflection.Emit banyak, dan itu tidak tersedia di Xbox Net Framework.
ElementCy
Poin yang sangat bagus. Diperbarui.
Mike Strobel
2
Jangan berpikir xbox mendapatkan Refleksi. Kirim dalam waktu dekat, karena winPhone memiliki xna dan silverlight dan tidak mendukung namespace itu
Cubed2D
1
Anda mungkin benar. WP7 sebenarnya tidak menjalankan Silverlight, tetapi "Silverlight Mobile Compact Framework", yang didasarkan pada .NET CF bukan .NET. Saya percaya Xbox 360 juga menjalankan .NET CF daripada .NET Framework penuh, sehingga kemungkinan berakhir dengan implementasi yang mirip dengan WP7. Baiklah.
Mike Strobel
2

Solusi terbaik yang bisa saya berikan kepada Anda adalah dengan hanya script di C #. Anda dapat mengompilasinya saat runtime ketika Anda menargetkan jendela dan mengkompilasinya sebelum diberikan untuk xbox. (sebagai dll)

Itu akan menjadi solusi termudah. Anda juga bisa melakukannya dalam VB.NET atau bahasa .NET apa pun. (tidak yakin tentang yang scripting) Pada dasarnya, saya mengatakan untuk memiliki skrip Anda di dll mereka sendiri. Anda dapat mengompilasinya saat runtime di Windows. (apakah Anda benar-benar ingin mereka melakukan ini di xbox 360 ?, Anda tidak dapat memperbarui game di sana, setidaknya saya rasa tidak)

Saya bisa mengerti rasa frustrasi Anda, saya ingin menggunakan Lua juga.

Untuk meringkasnya: 1) Memiliki itu dibangun saat runtime pada Windows 2) Bangun sebelumnya untuk Xbox 360

Itu yang saya rekomendasikan.

Michael Coleman
sumber
1
  1. Lua interpreter tidak dikelola, AFAIK, jadi Anda tidak bisa menjalankannya di Xbox dengan XNA

  2. Anda dapat menggunakan penerjemah Javascript bernama Jint yang tidak bergantung pada DLR dan berfungsi di Xbox ( http://jint.codeplex.com/ )

wizzard0
sumber
Saya akan mengatakan bahwa poin pertama tidak benar, karena ada beberapa tautan di sini yang memiliki Lua <-> C #.
Bebek Komunis
Anda hanya dapat menjalankan kode terkelola di Xbox. Lua <-> C # bridge adalah kode yang tidak dikelola yang memungkinkan Anda memanggil Lua dari kode terkelola; sampai MS memasukkannya dalam XNA atau Xbox 360 OS, Anda tidak dapat menjalankannya di sana.
0

Secara teknis tidak menjawab pertanyaan Anda (tidak berfungsi di xbox), tetapi LuaInterface memungkinkan integrasi Lua dengan C # yang relatif tanpa rasa sakit.

RCIX
sumber
0

Hanya untuk memperbarui pertanyaan ini, saya menghabiskan hari terakhir melakukan pencarian yang luas, dan saya telah menemukan bahwa menggunakan UniLua (dibuat untuk digunakan dengan kesatuan, implementasi C # murni) adalah pilihan terbaik dan paling efektif untuk mendapatkan Lua di Xbox. Saya menanggalkannya, mengeluarkan semua materi Unity, dan itu bekerja dengan baik.

Saya juga menambahkan beberapa fungsionalitas yang ditemukan di LuaInterface dengan membebani operator [] untuk LuaState, dan semacamnya.

CFWLua

Saya harap ini bermanfaat.

Bradley Galloway
sumber