没有硬编码的C#脚本

时间:2013-11-17 07:36:44

标签: c# lua scripting-language

我正在尝试使用C#编写脚本。我之前问了一个类似的问题但是这个例子指的是.cs文件中的invovled硬编码。无论如何编译和运行包含C#代码的程序集,其中包含可以更改托管.cs文件中的变量的函数,赋值,运算符和类型? 例如:

我的.cs文件包含一个字符串变量myName 我的脚本代码包含一个函数myfunction 有没有办法从我的函数访问myName并通过调用myfunction上的Invoke方法更改我的.cs文件中的值?没有在我的.cs文件中硬编码myfunction?

1 个答案:

答案 0 :(得分: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

还有一个例子专门用于你计划做的事情。所以假设您有 Actor 类:

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());