Есть ли Lua API, который работает с C # для разработки на ПК и XBox 360? [закрыто]

18

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

alFador
источник
5
Этакая маленькая шутка, но это Lua (имя), а не LUA (аббревиатура, или вы кричите)
RCIX
Со страницы Lua «About»: «Lua используется для расширения программ, написанных не только на C и C ++, но и на ... C # ...». Первым результатом от Google для "lua in C #" была интересная статья от GameDev.net ( gamedev.net/reference/articles/article2275.asp ) под названием Использование Lua с C #.
реверберация
Многие разработчики .net используют ironpython или ironruby для сценариев.
Сорвал

Ответы:

6

Это то, на что я бы вам указывал (http://www.xnua.com/xna_lua_xnua), но оно долгое время не обновлялось.

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

ElementCy
источник
3
Некоторые хорошие моменты здесь. Стоит задуматься, зачем вам язык сценариев, когда ваша игра написана на c #? Механизмы C ++ могут получить большую гибкость от использования языка сценариев, так как C ++ обычно компилируется очень долго. C # довольно быстр в этом отношении. Если по какой-то причине вы хотите, чтобы ваши скрипты компилировались во время выполнения, вы всегда можете использовать CodeDom (или любые другие методы генерации кода) для компиляции CS-файла во время загрузки, но это будет работать только на ПК. Есть глава об этом в книге «Разработка
набора игровых движков
^^ Разработка игрового движка - хорошая книга :). Это немного устарело, но концепции все еще твердые. Проблема с привязками языка сценариев .NET заключается в том, что для запуска на Xbox 360 их нужно интерпретировать. Без System.Reflection.Emit вы не сможете многое сделать на пути генерации кода. У меня сложилось впечатление, что эти возможности появятся на Xbox 360 в ближайшем будущем, но, основываясь на обсуждении комментариев в моем ответе ниже, это, вероятно, не тот случай. Таким образом, производительность сценариев на Xbox 360, вероятно, не будет такой большой :(.
Майк Штробель,
@ Cubed2D: Lua является своего рода отраслевым стандартом для скриптовых игр, и непрофессиональному программисту также легче его понять.
RCIX
@ Майк по праву, может скомпилировать или сгенерировать код на 360. Если бы я собирался реализовать это, я бы просто не поддерживал скрипты c # на 360, а просто использовал его как функцию набора инструментов для ПК. Просто настройте проект vs, чтобы он включал папку сценариев в сборку 360, и игнорируйте на ПК. @RCIX только потому, что это делают все остальные, не значит, что вы должны это делать. Если вы хотите использовать Xna, это будет больше проблем, чем стоит. Существуют более эффективные способы предоставления настраиваемых параметров не программистам в мире .net, пытающимся реализовать lua (что, как я полагаю, вы получаете с комментарием, не относящимся к программистам)
Cubed2D
@ Cubed2D: Это хороший момент, но это действительно зависит от вашей целевой платформы. если вы пишете только для ПК, то вы можете использовать LuaInterface и родной lua dll, и вам не придется писать реализацию. Кроме того, дело в том, что, поскольку у него есть такие поклонники в мире разработки игр, это естественно разработанные функции, которые делают его подходящим для этой среды. Более того, у меня есть основное начало в программировании через Lua, и я держал пари, что многие люди сделали это, поэтому понятно, почему люди хотят его использовать.
RCIX
2

Если вы ищете скрипты в C #, обязательно посмотрите IronPython . Это не просто API-интерфейс Python для C #, это фактически отдельная реализация Python, которая компилируется в ту же сборку CLR (с той же производительностью), что и C #, но может взаимодействовать как язык сценариев. Любая оболочка Lua для C # будет очень медленной из-за накладных расходов на Marshalling.

Шон Эдвардс
источник
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. (как длл)

Это было бы самым простым решением. Вы также можете сделать это на VB.NET или любом другом языке .NET. (хотя не уверен насчет скриптовых) В основном я говорю, что ваши скрипты должны быть в своих собственных dll. Вы можете их скомпилировать во время выполнения в Windows. (Вы действительно хотите, чтобы они делали это на xbox 360? Вы не можете обновить свои игры там, по крайней мере, я так не думаю)

Я могу понять ваше разочарование, я тоже хотел использовать Lua.

Подводя итог: 1) Соберите его во время выполнения в Windows 2) Постройте его заранее для Xbox 360

Это то, что я рекомендую.

Майкл Коулман
источник
1
  1. Интерфейс Lua неуправляем, AFAIK, поэтому вы не можете заставить его работать на Xbox с XNA

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

wizzard0
источник
Я бы сказал, что первый пункт не соответствует действительности, поскольку здесь есть несколько ссылок, имеющих Lua <-> C #.
Коммунистическая утка
Вы можете запустить только управляемый код на Xbox. Мост Lua <-> C # - это неуправляемый код, позволяющий вам вызывать Lua из управляемого кода; пока MS не включит его в XNA или Xbox 360 OS, вы не сможете запустить его там.
0

Технически он не отвечает на ваш вопрос (не работает на xbox), но LuaInterface позволяет безболезненно интегрировать Lua с C #.

RCIX
источник
0

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

Я также добавил некоторые функциональные возможности, обнаруженные в LuaInterface, перегрузив оператор [] для LuaState и тому подобное.

CFWLua

Я надеюсь, что это было полезно.

Брэдли Галлоуэй
источник