Чи є API Lua, який працює з C # для розробки PC & XBox 360? [зачинено]


18

Я читаю книгу з розробки ігор, в якій вони показують, як робити сценарії для вашої гри в Луа. Вони програмують Lua та використовують його на C ++, але мені було цікаво, чи є бібліотека чи API для використання Lua з C #: конкретно від XNA для розробки ігор для ПК та XBox 360?


5
Якийсь маленький гвоздик, але це Lua (ім'я), а не LUA (абревіатура, що ви чи кричите)
RCIX

На сторінці "Про" Lua: "Lua використовувався для розширення програм, написаних не лише на C та C ++, а й на ... C # ...". Першим результатом від Google для "lua in C #" стала цікава стаття від GameDev.net ( gamedev.net/reference/articles/article2275.asp ) під назвою Використання Lua з C #.
reverbb

Багато сценаріїв .net використовують сценарій ironpython або ironruby.
Відірвано

Відповіді:


6

Це саме те, що я хотів би вказати на вас (http://www.xnua.com/xna_lua_xnua), але воно не оновлювалось давно.

C # - чудова мова, і в певному сенсі може використовуватися як сценарій мови у вашій грі c #. Нік Грейвлін створив кілька приємних навчальних посібників щодо двигуна плитки (http://blog.nickgravelyn.com/downloads/#tileengine) і використав користувальницький сценарій для запуску діалогу. Він також має основний приклад, коли дізнався про ключове слово "урожайність": http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/


3
Тут є кілька хороших моментів. Варто подумати, а чому ви хочете мову сценаріїв, коли ваша гра написана на c #? Двигуни C ++ можуть отримати багато спритності, використовуючи мову сценаріїв, оскільки для компіляції C ++ зазвичай потрібен тривалий час. C # є досить швидким у цьому плані. Якщо ви чомусь хочете, щоб ваші сценарії були зібрані під час виконання, ви завжди можете використовувати CodeDom (або будь-які інші методи генерації коду) для складання CS-файлу під час завантаження, але це буде працювати лише на ПК. Про це
йдеться

^^ Розвиток набору інструментів Game Engine - це приємна книга :). Зараз це трохи застаріло, але концепції все ще міцні. Проблема з прив'язкою мови NET-скриптів полягає в тому, що для роботи на Xbox 360 їх потрібно інтерпретувати. Без System.Reflection.Emit, ви не можете багато зробити на шляху створення коду. У мене було враження, що ці можливості найближчим часом з’являться до Xbox 360, але виходячи з обговорення коментарів у моїй відповіді нижче, це, мабуть, не так. Таким чином, продуктивність сценарію на Xbox 360, ймовірно, не буде такою великою :(.
Майк Стробель

@ Cubed2D: Lua - це свого роду галузевий стандарт для ігор сценаріїв, і непрофесійному програмісту це також простіше зрозуміти.
RCIX

@ Майте своє право, можу компілювати або генерувати код на 360. Якби я збирався реалізувати це, я просто не підтримував би сценарії c # на 360, а просто мав би це функцію набору інструментів для ПК. Просто налаштуйте проект vs, щоб включити папку сценаріїв до збірки 360 та ігнорувати на ПК. @RCIX тільки тому, що це роблять усі інші, не майте на увазі, що слід. Якщо ви хочете використовувати Xna, це буде більше клопоту, ніж варто. Є кращі способи викрити налаштовані параметри непрограмістів у світі .net, які намагаються реалізувати lua (що я припускаю, що ви отримуєте з вашим коментарем
непрограміст

@ Cubed2D: Це хороший момент, але це дійсно залежить від вашої цільової платформи. якщо ви пишете лише для ПК, ви можете використовувати LuaInterface та нативну lua dll, а не потрібно писати реалізацію. Крім того, справа в тому, що оскільки в світі розвитку таких ігор є такий перелік, природно розвинені функції, які роблять його корисним для цього середовища. Більше того, я розпочав свій головний початок програмування через Lua, і я ставлю на сумнів багато людей, тому зрозуміло, чому люди хочуть ним користуватися.
RCIX

2

Якщо ви шукаєте сценарії в C #, обов'язково подивіться на IronPython . Це не просто API python для C #, це фактично абсолютно окрема реалізація python, яка компілюється в ту саму збірку CLR (з тією ж продуктивністю), що і C #, але може бути пов'язана з мовою сценаріїв. Будь-яка обгортка Lua для C # буде набагато повільнішою через накладні витрати Маршалінга.


2

Як сказав Шон, на IronPython варто звернути увагу. IronPython насправді є однією з небагатьох динамічних мовних реалізацій для .NET, орієнтованих на режим динамічної мови (DLR). Існує принаймні один проект з відкритим кодом, спрямований на впровадження Lua на DLR (наприклад, цей ), але я не впевнений, чи є якісь реалізації перед завершенням. Добре реалізований набір прив'язок DLR для Lua повинен забезпечувати продуктивність нарівні з IronPython та IronRuby, і був би набагато швидшим, ніж обгортка Lua. Для порівняння, IronPython, як правило, краще, ніж CPython (іноді значно краще).

Примітка: В ElementCy йдеться нижче, DLR мови , як правило , не підтримуються на Xbox 360. Тим НЕ менше, це «інтерпретується режим» в DLR. Я не знаю про це достатньо, щоб сказати напевно, але можливо, можливо, заставити IronPython (або інші реалізації мови DLR) працювати на Xbox 360 в інтерпретованому режимі, хоча продуктивність, безумовно, постраждає. Можливо, варто запитати когось із команди DLR, чи знають вони, що це можливо. Якщо ні, Xbox 360 має отримати Reflection.Emit підтримку в рамках майбутньої підтримки Silverlight. Якщо і коли це станеться, я думаю, що встановити DLR та працювати на Xbox 360 не буде проблемою.


4
Єдина проблема з IronPython, вона не буде працювати на xbox360. Це добре, якщо ви хочете використовувати його лише для ПК. IronPyton використовує System.Reflection.Emit багато, і це недоступно у .net Framework Xbox.
ElementCy

Дуже хороший момент. Оновлено.
Майк Стробель

2
Не думайте, що xbox отримує Reflection.Emit найближчим часом, оскільки winPhone має і xna, і Silverlight, і не підтримує цей простір імен
Cubed2D

1
Ви можете мати рацію. WP7 насправді не працює Silverlight, але "Silverlight Mobile Compact Framework", який базується на .NET CF замість .NET. Я вважаю, що Xbox 360 також працює .NET CF замість повної .NET Framework, тому, швидше за все, це буде подібною реалізацією, ніж WP7. Що ж, добре.
Майк Стробель

2

Найкраще рішення, яке я можу вам запропонувати, - це просто сценарій на C #. Ви можете їх компілювати під час виконання програми, коли ви орієнтуєтесь на windows та збираєте їх до початку для xbox. (як dll)

Це було б найпростішим рішенням. Ви також можете це зробити на VB.NET або будь-якій мові .NET. (не впевнений у сценаріях, хоча) В основному, я кажу, щоб ваші сценарії були у власному dll. Ви можете їх компілювати під час виконання в Windows. (Ви дійсно хочете, щоб вони робили це на Xbox 360 ?, Ви не можете оновлювати свої ігри там, принаймні, я не думаю, що так)

Я можу зрозуміти ваше розчарування, я також хотів використовувати Луа.

Підсумовуючи це: 1) Побудуйте його під час виконання роботи в Windows 2) Створіть його до початку для Xbox 360

Ось що я рекомендую.


1
  1. Інтерпретатор Lua не керований, AFAIK, тому ви не можете змусити його працювати на Xbox із XNA

  2. Ви можете використовувати інтерпретатор Javascript під назвою Jint, який не покладається на DLR і працює на Xbox ( http://jint.codeplex.com/ )


Я б сказав, що перший пункт є неправдивим, оскільки тут є кілька посилань, які мають Lua <-> C #.
Качка комуністична

Ви можете запускати керований код лише на Xbox. Міст Lua <-> C # - це некерований код, що дозволяє викликати Lua з керованого коду; поки MS не включить його в XNA або Xbox 360 OS, ви не можете запустити його там.

0

Це технічно не відповідає на ваше запитання (не працює на xbox), але LuaInterface дозволяє інтегрувати Lua з C # відносно безболісно.


0

Тільки для оновлення цього питання я провів останній день, роблячи обширний пошук, і я виявив, що використання UniLua (призначена для використання з єдністю, чистою реалізацією C #) є найкращим та найефективнішим варіантом отримання Lua на Xbox. Я зняв його, вийняв весь матеріал Unity, і він чудово працює.

Я також додав деякі функції, знайдені в LuaInterface, перевантажуючи оператор [] для LuaState тощо.

CFWLua

Сподіваюся, це було корисно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.