在Lua中注册动态C#变量
我想在Lua脚本引擎中注册动态C#变量 我试过(例如:)在Lua中注册动态C#变量,c#,variables,dynamic,lua,C#,Variables,Dynamic,Lua,我想在Lua脚本引擎中注册动态C#变量 我试过(例如:)luaVM[“PlayerHealth”]=gameValues.PlayerHealth。 正如预期的那样,该变量被添加到全局变量的表中,但在Lua脚本运行时,它保持其初始值,例如100。 因此,在执行脚本之前,我只能教引擎一次不同的游戏值 但是我想让引擎知道当前的gameValues.PlayerHealth值在脚本执行期间,因为PlayerHealth会自然变化 我可以注册一个返回当前值的函数,但它看起来有点笨拙: if (Playe
luaVM[“PlayerHealth”]=gameValues.PlayerHealth
。
正如预期的那样,该变量被添加到全局变量的表中,但在Lua脚本运行时,它保持其初始值,例如100。
因此,在执行脚本之前,我只能教引擎一次不同的游戏值
但是我想让引擎知道当前的gameValues.PlayerHealth
值在脚本执行期间,因为PlayerHealth
会自然变化
我可以注册一个返回当前值的函数,但它看起来有点笨拙:
if (PlayerHealth() == 50) then ... end (looks stupid)
而不是:
if (PlayerHealth == 50) then ... end (looks cool)
我真的不知道该找什么,所以非常感谢您的帮助。请随意询问您需要知道的任何内容。似乎您可以将lua对象传递到后台线程,并从那里刷新变量:
public void RefreshLuaVariables(Lua luaVM)
{
while (true)
{
try
{
luaVM["PlayerX"] = vsc.PlayerX;
...
luaVM["TargetX"] = vsc.TargetX;
...
luaVM["SystemDate"] = DateTime.Now.ToString();
}
catch (Exception e)
{
Print(e.Message);
}
Thread.Sleep(100);
}
}
但这可能会导致随机崩溃。全局环境是lua 5.1中的一个表,因此您可以使用任何元数据技巧来进行代理查找,等。在lua 5.2和5.3中使用
\u ENV
也可以使用类似的技巧。只要代码在逻辑上合理且易于管理,代码的外观就无关紧要。我将lua对象传递给另一个线程,该线程会更新如下变量: