2013-11-17 1 views
4

Я пытаюсь создать игру с скриптами на C#. Ранее я задавал аналогичный вопрос, но в примере указывалось на принудительное кодирование в файле .cs. Нужно ли вообще компилировать и запускать сборку, содержащую код C#, который содержит функции, назначения, операторы и типы, которые могут изменять переменные в файле хоста .cs? Например:
Сценарий C# без жесткого кодирования

файл my .cs содержит строковую переменную myName.
мой код сценария содержит функцию myfunction.
Есть ли способ получить доступ к myName из моей функции и изменить его значение в моем .cs-файле, просто вызвав метод Invoke на myfunction? Без hardcoding myfunction в моем файле .cs?

ответ

11

NLua может сделать то, что вам нужно, и его очень легко реализовать в вашем проекте.

Lua lua = new Lua(); 
lua.DoString("return 'Hello World!'"); 

Вы также можете зарегистрировать функции DotNet для использования в файлах сценариев.

lua.RegisterFunction("print", this, typeof(Program).Print("Print")); 

После этого вы можете использовать его в файле файла .lua так:

function Run() 
    print("Hello World!") 
end 

И еще один пример специально для того, что вы собираетесь делать. Так позволяет сказать, что у вас есть актер класс:

class Actor 
{ 
    public string name; 
    public int age; 
} 

Это, как мы представляем DotNet материал для написания сценариев:

Lua lua = new Lua(); 
lua["actor"] = new Actor(); 

И теперь в сценарии:

function Run() 
    actor.name = "Thomas" 
    actor.age = 20 
end 

Я глобальная переменная в этом примере, поэтому экземпляр класса Actor будет доступен во всех сценариях. Вот как мы можем передать это как аргумент функции:

Lua lua = new Lua(); 
lua.LoadFile("Script.lua"); 
LuaFunction function = lua["Run"] as LuaFunction; 
function.Call(new Actor()); 
+0

как это сделать? –

+0

Вам нужно увеличить репутацию за это. Спасибо за ваши добрые намерения. Вы можете отметить мой пост как ответ на свой вопрос. Это сработает. :) – martynaspikunas

+0

Я не знаю, как это сделать, если не сказать это здесь. Итак, пока я не могу установить nlua, я все еще могу установить luaInterface и должен больше смотреть, но я верю, ответил на вопрос моих людей! –