我正在尝试使用C#编写脚本。我之前问了一个类似的问题但是这个例子指的是.cs文件中的invovled硬编码。无论如何编译和运行包含C#代码的程序集,其中包含可以更改托管.cs文件中的变量的函数,赋值,运算符和类型?
例如:
我的.cs文件包含一个字符串变量myName 我的脚本代码包含一个函数myfunction 有没有办法从我的函数访问myName并通过调用myfunction上的Invoke方法更改我的.cs文件中的值?没有在我的.cs文件中硬编码myfunction?
答案 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());