Ano*_*lex 4 c# lua scripting-language
我正在尝试使用C#编写脚本游戏.我之前问了一个类似的问题但是这个例子指的是.cs文件中的invovled硬编码.无论如何编译和运行包含C#代码的程序集,其中包含可以更改托管.cs文件中的变量的函数,赋值,运算符和类型?例如:
我的.cs文件包含一个字符串变量myName.
我的脚本代码包含一个函数myfunction.
有没有办法从我的函数访问myName并通过调用myfunction上的Invoke方法更改我的.cs文件中的值?没有在我的.cs文件中硬编码myfunction?
mar*_*nas 11
NLua可以完成您想要的任务,并且可以非常轻松地将其实现到您的项目中.
Lua lua = new Lua();
lua.DoString("return 'Hello World!'");
Run Code Online (Sandbox Code Playgroud)
您还可以注册DotNet函数以在脚本文件中使用.
lua.RegisterFunction("print", this, typeof(Program).Print("Print"));
Run Code Online (Sandbox Code Playgroud)
之后,您可以在.lua文件文件中使用它:
function Run()
print("Hello World!")
end
Run Code Online (Sandbox Code Playgroud)
还有一个例子专门用于你计划做的事情.所以假设你有Actor类:
class Actor
{
public string name;
public int age;
}
Run Code Online (Sandbox Code Playgroud)
这就是我们将DotNet内容引入脚本的方式:
Lua lua = new Lua();
lua["actor"] = new Actor();
Run Code Online (Sandbox Code Playgroud)
现在在脚本中:
function Run()
actor.name = "Thomas"
actor.age = 20
end
Run Code Online (Sandbox Code Playgroud)
我在这个例子中使用了全局变量,因此可以在所有脚本中访问Actor类的实例.这是我们如何将它作为函数参数传递:
Lua lua = new Lua();
lua.LoadFile("Script.lua");
LuaFunction function = lua["Run"] as LuaFunction;
function.Call(new Actor());
Run Code Online (Sandbox Code Playgroud)