Я прогуглил разные библиотеки. Выбирал по параметрам:
1. полный source code, никаких dll
2. 100% совместимость даже с обрезанными Mono .NET на всех платформах
Мы тоже хотели прикрутить Lua или Python, но пока останавливает как раз то, что они не на всех платформах работают. В отзывах Unity Lua Interface Library написано что на маке не работает и ответ разработчика что мол да, не работает.
Вы проверяли работоспособность на всех платформах?
Мы не проверяли, но везде написано, что именно эта UniLua будет работать, т.к. написана полностью в исходниках и не ссылается ни на какие хитрые части дотнета. И кучи отзывов, что да, помогло и на iOS заработало.
А почему вас не устроил C# или JS?
Ведь C#,UnityScript и Javascript в Unity и есть скрипты.
Да и велосипедные надстройки теряют тестируемость.
Что вы выиграли от внедрения еще одного уровня скриптов?
Потому что написание квестов, скриптовых сценок и т.п. — не должно требовать перекомпиляции кода. Это геймдизайнерская задача. А никакая геймдизайнерская задача не должна требовать лазанья в код. Это — аксиома грамотного построения кода игры.
Простите, написание на LUA разве не лизание в коде, да и еще в сторонней IDE?
Описание квестов, уровней и другого динамического контента должно происходить деклоративно, например, в XML или JSON формате и скармливается движку, написанного программистом на «родных» языках для Unity и протестированному.
На мой взгляд — это грамотное построение проекта.
Так именно так и есть. Есть отдельные ресурсы гейм-баланса. Скрипты в текстовых файликах, баланс в табличке Google Docs. Все это дело скармливается в игру.
То есть дизайнер придумал квест, перед которым по его задумке нужно проиграть анимацию. Он забил квест в табличку и прописал ему скриптик в отдельном текстовом файлике. Все изолированно.
Тогда зачем Lua? Это не декларативное описание, а язык скриптов.
Использование Lua может нарушать порядок выполнения, а также приводить к появлению ошибок.
Этих недостатков лишен декларативный подход.
Можно сделать написание и компиляцию C# скриптов без перекомпиляции кода! Можно генерить код по декларативным описаниям дизайнеров. У нас например дизайнеры писали функцию расчета урона как обычную формулу а мы генерили и компилировали код, и меняли без перекомпиляции хоть в рантайме.
Повторюсь, C# может все что любой другой скриптовой язык и любая прикрутка луа и других скриптов к шарпу всегда будет бессмысленной и вызывать недоумение.
Правильно ли я понимаю, что если правки не в начал игры, а в нескольких произвольных местах, то надо всю игру проходить заново до момента изменений?
Или гейм дизайнер еще и читерит в сейвах?
Друзья! Скажите, пожалуйста, как обстоят дела в этом юнити с тестированием? Тестируют ли вообще? Какие библиотеки используют?
И увидим ли мы тесты в этой замечательной серии?
Спасибо.
Не смешите мои тапки! Покажите любой известный движок или просто проект, где применили такую методику и не разочаровались.
Сам на Lua сделал больше пяти проектов, но таких извращений еще ни в одном вообще не встречал.
Думаю есть только один вариант, когда уже есть на Lua написанная логика проверенная может даже из готовой игры.
и вот что бы только связать и запустить логику через два десятка Lua функций под Unity, на такую жертву можно пойти.
дело в том что Unity уже содержит скриптовый Engine на базе mono, а также содержит IDE для работы как программиста(MonoDevelop или VS), так и level-дизайнера(сама оболочка Unity и MonoDevelop если уже приходится делать кастовую логику на уровне)
Используя Unity, вы по сути, пишите скрипты под универсальный 3D Engine. И это все выгодно отличает Unity от все остальных игровых фремворков.
Описанный вами подход отлично подошел бы для реализации на Marmalade, где есть C++ и все. А в Unity как раз подход такой, что бы можно было легко и просто делать уровни и их логику, прост отлаживать и релизить игровые приложения.
Простите, но вы забиваете микроскопом гвозди.
Вообще зачем плодить сущности? Вам и так дали широкие возможности скриптования на C#, JavaScript или Boo на ваш выбор. Зачем еще Lua нужна? Тем более с такими шаманствами?
Сделайте редактор квестов и ведите описание квестов в JSON или csv, как уже было описано ранее. Надо чтобы перед квестом проигрался ролик — меняем соответствующий параметр в блокноте и не мучаемся с скриптованием и программированием. Пожалейте дизайнеров, им и так много чего считать и балансить приходится.
Единственное что приходит в голову для чего может понадобится Lua — клиент серверная игра-сервис с толстым клиентом. Например: у нас есть два числа x и y и мы знаем что в любой момент взаимодействие между ними может измениться. Ок, посылаем запрос серверу, он нам выдает скриптик на Lua и уже на клиенте считаем. Все довольны и выпускать патч ради такой мелочи не требуется.
Создание игры на ваших глазах — часть 3: Прикручиваем скриптовый язык к Unity (UniLua)