不使用硬编码的C#脚本编写。

我正在尝试使用C#脚本创建一个游戏。我之前问过类似的问题,但是示例涉及到在.cs文件中进行硬编码。有没有办法编译和运行包含可以更改托管.cs文件中的变量的函数,赋值,运算符和类型的C#代码的程序集?

例如:

我的.cs文件包含一个字符串变量myName。

我的脚本代码包含一个函数myfunction。

有没有办法从我的函数中访问myName并通过调用myfunction的Invoke方法在我的.cs文件中更改它的值?而不需要在我的.cs文件中硬编码myfunction?

点赞
用户2986019
用户2986019

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());
2013-11-17 08:00:09