Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Lua中注册动态C#变量_C#_Variables_Dynamic_Lua - Fatal编程技术网

在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

我想在Lua脚本引擎中注册动态C#变量

我试过(例如:)
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对象传递给另一个线程,该线程会更新如下变量: