Я читаю книгу по разработке игр, в которой они показывают, как создавать сценарии для вашей игры на Lua. Они программируют Lua и используют его из C ++, но мне было интересно, есть ли библиотека или API для использования Lua из C #: в частности, из XNA для разработки игр для ПК и XBox 360?
18
Ответы:
Это то, на что я бы вам указывал (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/
источник
Если вы ищете скрипты в C #, обязательно посмотрите IronPython . Это не просто API-интерфейс Python для C #, это фактически отдельная реализация Python, которая компилируется в ту же сборку CLR (с той же производительностью), что и C #, но может взаимодействовать как язык сценариев. Любая оболочка Lua для C # будет очень медленной из-за накладных расходов на Marshalling.
источник
Как сказал Шон, 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 не будет проблемой.
источник
Лучшее решение, которое я мог бы дать, - это просто написать скрипт на C #. Вы можете скомпилировать их во время выполнения, когда вы нацеливаетесь на windows, и скомпилировать их заранее для xbox. (как длл)
Это было бы самым простым решением. Вы также можете сделать это на VB.NET или любом другом языке .NET. (хотя не уверен насчет скриптовых) В основном я говорю, что ваши скрипты должны быть в своих собственных dll. Вы можете их скомпилировать во время выполнения в Windows. (Вы действительно хотите, чтобы они делали это на xbox 360? Вы не можете обновить свои игры там, по крайней мере, я так не думаю)
Я могу понять ваше разочарование, я тоже хотел использовать Lua.
Подводя итог: 1) Соберите его во время выполнения в Windows 2) Постройте его заранее для Xbox 360
Это то, что я рекомендую.
источник
Интерфейс Lua неуправляем, AFAIK, поэтому вы не можете заставить его работать на Xbox с XNA
Вы можете использовать интерпретатор Javascript под названием Jint, который не использует DLR и работает на Xbox ( http://jint.codeplex.com/ ).
источник
Технически он не отвечает на ваш вопрос (не работает на xbox), но LuaInterface позволяет безболезненно интегрировать Lua с C #.
источник
Просто чтобы обновить этот вопрос, я потратил последний день на обширные поиски и обнаружил, что использование UniLua (созданного для единства, реализация на чистом C #) является лучшим и наиболее эффективным вариантом для получения Lua на Xbox. Я разобрал его, вынул весь материал Unity, и он прекрасно работает.
Я также добавил некоторые функциональные возможности, обнаруженные в LuaInterface, перегрузив оператор [] для LuaState и тому подобное.
CFWLua
Я надеюсь, что это было полезно.
источник