Lua API ใดที่ทำงานร่วมกับ C # สำหรับพีซีและการพัฒนา XBox 360 ได้หรือไม่? [ปิด]


18

ฉันกำลังอ่านหนังสือเกี่ยวกับ Game Development ที่พวกเขาแสดงให้คุณเห็นถึงวิธีการสร้างสคริปต์สำหรับเกมของคุณใน Lua พวกเขาเขียนโปรแกรม Lua และใช้มันจาก C ++ แต่ฉันสงสัยว่ามีไลบรารี่หรือ API ที่ใช้ Lua จาก C #: โดยเฉพาะจาก XNA เพื่อพัฒนาเกมสำหรับพีซีและ XBox 360 หรือไม่?


5
Nitpick ขนาดเล็ก แต่เป็น Lua (ชื่อ) ไม่ใช่ LUA (ตัวย่อหรือคุณกำลังตะโกน)
RCIX

จากหน้า Lua "เกี่ยวกับ": "Lua ถูกใช้เพื่อขยายโปรแกรมที่เขียนไม่เพียง แต่ใน C และ C ++ แต่ยังอยู่ใน ... C # ... " ผลลัพธ์แรกจาก Google สำหรับ "lua ใน C #" เป็นบทความที่น่าสนใจจาก GameDev.net ( gamedev.net/reference/articles/article2275.asp ) เรื่องการใช้ Lua กับ C #
reverbb

devs. net จำนวนมากใช้ ironpython หรือ ironruby สำหรับการเขียนสคริปต์
ฉีก

คำตอบ:


6

นี่คือฉันจะชี้คุณ (http://www.xnua.com/xna_lua_xnua) แต่มันไม่ได้รับการปรับปรุงเป็นเวลานาน

C # เป็นภาษาที่ยอดเยี่ยมและอาจใช้เป็นภาษาสคริปต์ในเกม c # ของคุณ Nick Gravelyn ได้สร้างบทเรียนที่น่าสนใจเกี่ยวกับโปรแกรมย่อย (http://blog.nickgravelyn.com/downloads/#tileengine) และใช้เครื่องมือสร้างสคริปต์ที่กำหนดเองเพื่อปิดการโต้ตอบ เขายังมีตัวอย่างพื้นฐานเมื่อเขาเรียนรู้เกี่ยวกับคำหลัก "ผลผลิต": http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/


3
บางจุดที่ดีที่นี่ สิ่งหนึ่งที่ควรคำนึงถึงคือทำไมคุณถึงต้องการภาษาสคริปต์เมื่อเกมของคุณเขียนด้วย c #? เอ็นจิน C ++ สามารถเพิ่มความว่องไวจากการใช้ภาษาสคริปต์เนื่องจาก C ++ มักใช้เวลาในการคอมไพล์นาน C # มีความรวดเร็วในเรื่องนี้ หากด้วยเหตุผลบางประการที่คุณต้องการรวบรวมสคริปต์ของคุณตอนรันไทม์คุณสามารถใช้ CodeDom (หรือวิธีการสร้างรหัสอื่น ๆ ) เพื่อรวบรวมไฟล์ CS ณ เวลาโหลด แต่สิ่งนี้จะใช้ได้กับพีซีเท่านั้น มีบทหนึ่งเกี่ยวกับเรื่องนี้ในหนังสือ "การพัฒนาชุดเครื่องมือเครื่องเกม"
Cubed2D

^^ การพัฒนาชุดเครื่องมือ Engine Gameเป็นหนังสือที่ดี :) มันค่อนข้างล้าสมัยไปแล้วในตอนนี้ แต่แนวคิดก็ยังคงแข็งแกร่งอยู่ ปัญหาเกี่ยวกับการผูกภาษาสคริปต์. NET คือเพื่อให้สามารถทำงานบน Xbox 360 ได้นั้นพวกเขาจะต้องตีความ หากไม่มี System.Reflection.Emit คุณจะไม่สามารถทำสิ่งต่าง ๆ ในการสร้างรหัสได้มากนัก ฉันรู้สึกว่าขีดความสามารถเหล่านี้จะมาถึง Xbox 360 ในอนาคตอันใกล้ แต่จากการอภิปรายแสดงความคิดเห็นในคำตอบของฉันด้านล่างนี้อาจไม่ได้เป็นเช่นนั้น ดังนั้นประสิทธิภาพของสคริปต์ใน Xbox 360 อาจจะไม่ยอดเยี่ยมมาก :(
Mike Strobel

@ Cubed2D: Lua เป็นมาตรฐานอุตสาหกรรมประเภทหนึ่งสำหรับเกมการเขียนสคริปต์และยังง่ายต่อการเข้าใจโปรแกรมเมอร์
RCIX

@ ไมค์ขวาของคุณสามารถรวบรวมหรือสร้างรหัสใน 360 ถ้าฉันจะใช้นี้ฉันก็จะไม่สนับสนุนสคริปต์ c # ใน 360 และเพียงแค่มีมันเป็นคุณสมบัติชุดเครื่องมือพีซี เพียงแค่ปรับ vs project เพื่อรวมโฟลเดอร์สคริปต์ใน 360 build และละเว้นบนพีซีหนึ่งเครื่อง @RCIX เพียงเพราะทุกคนทำไม่ได้หมายความว่าคุณควรทำ หากคุณต้องการใช้ Xna มันจะมีปัญหามากกว่ามูลค่าของมัน มีวิธีที่ดีกว่าในการแสดงพารามิเตอร์ที่ปรับแต่งได้ให้กับโปรแกรมเมอร์ที่ไม่ใช่ในโลก. net ที่พยายามใช้ lua (สิ่งที่ฉันถือว่าคุณได้รับพร้อมกับความคิดเห็นที่ไม่ใช่โปรแกรมเมอร์ของคุณ)
Cubed2D

@ Cubed2D: นั่นเป็นจุดที่ดี แต่ขึ้นอยู่กับแพลตฟอร์มเป้าหมายของคุณจริงๆ หากคุณเขียนเฉพาะสำหรับพีซีคุณสามารถใช้ LuaInterface และ lua dll แบบดั้งเดิมและไม่ต้องเขียนการใช้งาน นอกจากนี้ประเด็นก็คือว่ามันมีดังต่อไปนี้ในโลกการพัฒนาเกมมันเป็นคุณสมบัติที่พัฒนาขึ้นตามธรรมชาติที่ทำให้ดีสำหรับสภาพแวดล้อมนั้น ยิ่งกว่านั้นฉันได้เริ่มต้นการเขียนโปรแกรมผ่าน Lua และฉันพนันได้ว่าหลาย ๆ คนทำดังนั้นจึงเป็นที่เข้าใจได้ว่าทำไมผู้คนถึงต้องการใช้มัน
RCIX

2

หากคุณกำลังมองหาสคริปต์ใน C # ให้ดูที่IronPythonอย่างแน่นอน มันไม่ได้เป็นเพียง python API สำหรับ C # จริงๆแล้วมันเป็นการใช้งาน python ที่แยกจากกันอย่างสมบูรณ์ซึ่งรวบรวมไปยังแอสเซมบลี CLR เดียวกัน (ด้วยประสิทธิภาพเดียวกัน) ที่ C # ทำ แต่สามารถเชื่อมต่อกับภาษาสคริปต์ได้ เสื้อคลุม Lua ใด ๆ สำหรับ C # จะช้ามากเนื่องจากค่าใช้จ่ายของ Marshalling


2

ดังที่ฌอนกล่าวว่า IronPython น่าดู IronPython เป็นหนึ่งในการใช้ภาษาแบบไดนามิกไม่กี่อย่างสำหรับ. NET ที่กำหนดเป้าหมายเป็น Dynamic Language Runtime (DLR) มีอย่างน้อยหนึ่งโครงการโอเพนซอร์ซที่มีจุดประสงค์ในการนำ Lua ไปใช้ใน DLR (เช่นนี้ ) แต่ฉันไม่แน่ใจว่ามีการนำไปใช้งานใกล้เสร็จหรือไม่ ชุดการเชื่อมโยง DLR สำหรับ Lua ที่ได้รับการใช้งานอย่างดีควรจัดเตรียมประสิทธิภาพเทียบเท่ากับ IronPython และ IronRuby และจะเร็วกว่าเสื้อคลุม Lua มาก เพื่อประโยชน์ในการเปรียบเทียบโดยทั่วไป IronPython จะทำงานได้ดีกว่า CPython (บางครั้งก็ดีกว่า)

หมายเหตุ:สหรัฐอเมริกาเป็น ElementCy ด้านล่างภาษา DLR มักจะไม่ได้รับการสนับสนุนบน Xbox 360 แต่มีคือเป็น "โหมดการตีความ" ใน DLR ฉันไม่รู้พอที่จะพูดอย่างแน่นอน แต่อาจเป็นไปได้ที่จะใช้ IronPython (หรือการใช้ภาษา DLR) เพื่อให้ทำงานบน Xbox 360 ในโหมดตีความแม้ว่าประสิทธิภาพจะลดลงอย่างแน่นอน มันอาจจะคุ้มค่าที่จะถามใครสักคนในทีม DLR ว่าพวกเขารู้ว่าสิ่งนี้เป็นไปได้หรือไม่ ไม่เช่นนั้น Xbox 360 ควรได้รับ Reflection รับการสนับสนุนเป็นส่วนหนึ่งของการสนับสนุน Silverlight ที่กำลังจะมาถึง ถ้าและเมื่อสิ่งนั้นเกิดขึ้นฉันคิดว่าการเปิด DLR และทำงานบน Xbox 360 จะไม่เป็นปัญหา


4
เฉพาะปัญหากับ IronPython มันจะไม่ทำงานบน xbox360 ไม่เป็นไรถ้าคุณต้องการใช้สำหรับพีซีเท่านั้น IronPyton ใช้ System.Reflection รับจำนวนมากและไม่พร้อมใช้งานบน. net Framework ของ Xbox
ElementCy

เป็นจุดที่ดีมาก Updated
Mike Strobel

2
อย่าคิดว่า xbox กำลังได้รับการไตร่ตรองเร็ว ๆ นี้เนื่องจาก winPhone มีทั้ง xna และซิลเวอร์ไลท์และไม่รองรับเนมสเปซนั้น
Cubed2D

1
คุณอาจจะถูกต้อง WP7 ไม่ได้เรียกใช้ Silverlight แต่ "Silverlight Mobile Compact Framework" ซึ่งใช้ NET CF แทน. NET ฉันเชื่อว่า Xbox 360 ยังใช้. NET CF แทน. NET Framework แบบเต็มดังนั้นจึงน่าจะจบลงด้วยการใช้งานคล้ายกับ WP7 โอ้ดี
Mike Strobel

2

ทางออกที่ดีที่สุดที่ฉันสามารถให้คุณได้ก็คือแค่สคริปต์ใน C # คุณสามารถคอมไพล์พวกมันตอนรันไทม์เมื่อคุณกำหนดเป้าหมาย windows และคอมไพล์พวกมันก่อนส่งให้กับ xbox (เป็น dll)

นั่นจะเป็นทางออกที่ง่ายที่สุด คุณสามารถทำได้ใน VB.NET หรือภาษา. NET (ไม่แน่ใจเกี่ยวกับสคริปต์ที่แม้ว่า) โดยทั่วไปฉันกำลังจะมีสคริปต์ของคุณใน dll ของตัวเอง คุณสามารถรวบรวมได้ที่รันไทม์บน Windows (คุณต้องการให้พวกเขาทำสิ่งนี้ใน xbox 360 หรือไม่คุณไม่สามารถอัปเดตเกมของคุณที่นั่นอย่างน้อยฉันก็ไม่คิดอย่างนั้น)

ฉันสามารถเข้าใจความคับข้องใจของคุณฉันต้องการใช้ Lua เช่นกัน

เพื่อรวมมันขึ้นมา: 1) มันสร้างขึ้นที่รันไทม์บน Windows 2) สร้างขึ้นก่อนมือสำหรับ Xbox 360

นั่นคือสิ่งที่ฉันแนะนำ


1
  1. Lua interpreter ไม่มีการจัดการ AFAIK ดังนั้นคุณจึงไม่สามารถทำงานกับ Xbox ด้วย XNA ได้

  2. คุณสามารถใช้Javascript interpreter ที่ชื่อ Jint ซึ่งไม่พึ่งพา DLR และทำงานบน Xbox ( http://jint.codeplex.com/ )


ฉันจะบอกว่าจุดแรกนั้นไม่จริงเนื่องจากมีหลายลิงก์ที่นี่ที่มี Lua <-> C #
The Duck คอมมิวนิสต์

คุณสามารถเรียกใช้รหัสที่ได้รับการจัดการบน Xbox เท่านั้น Lua <-> C # bridge เป็นรหัสที่ไม่มีการจัดการช่วยให้คุณสามารถโทร Lua จากรหัสที่ได้รับการจัดการ จนกว่า MS จะรวมไว้ใน XNA หรือ Xbox 360 OS คุณจะไม่สามารถเรียกใช้งานได้ที่นั่น

0

ในทางเทคนิคไม่สามารถตอบคำถามของคุณ (ไม่ทำงานบน xbox) แต่LuaInterfaceช่วยให้การรวม Lua กับ C # ค่อนข้างลำบาก


0

เพียงแค่อัปเดตคำถามนี้ฉันใช้เวลาในวันสุดท้ายกับการค้นหาอย่างละเอียดและฉันพบว่าการใช้ UniLua (สร้างขึ้นเพื่อใช้งานด้วยความเป็นอันหนึ่งอันเดียวกันการใช้ C # บริสุทธิ์) เป็นตัวเลือกที่ดีที่สุดและมีประสิทธิภาพมากที่สุดสำหรับ Lua บน Xbox ฉันถอดมันออกหยิบวัสดุ Unity ทั้งหมดออกและใช้งานได้ดี

ฉันยังเพิ่มฟังก์ชันการทำงานบางอย่างที่พบใน LuaInterface ด้วยการใช้งานโอเปอเรเตอร์ [] สำหรับ LuaState มากเกินไป

CFWLua

ฉันหวังว่านี้เป็นประโยชน์.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.