如何在多个脚本调用中保持 Lua/C++ 变量状态

我对 Lua 脚本编写还比较陌生,但我想将其整合到我的游戏引擎中。目前,我已经将 Lua 和 C++ 链接在一起,并可以基本地调用 C++ 类的方法或相反。Lua 脚本被设置为组件,您可以将其附加到游戏对象上。但是,我遇到了一个问题,每次调用脚本时我的变量都会被重置。下面是一个脚本的示例:

--Lua 脚本--
input = InputManager()

function initialize()

end

function update()
    if(input:KeyDown(KEY_SPACE)) then
        print("随机数 before: ", input.random)
        input.random = input.random + 10
        print("随机数 after: ", input.random)
    end
end

在附加脚本组件时,initialize 方法被调用,而 update 方法则在每个帧中调用。在这个例子中,我在我的 C++ InputManager 类中绑定了一个整数随机数,它被初始化为 5。我使用 Lunafive 属性控制变量的获取和设置。

当我按下空格键时,我希望第一次迭代输出:

随机数 before: 5

随机数 after: 15

然后是下一次迭代:

随机数 before: 15

随机数 after: 25

然而,每次迭代我都得到 5 和 15 这个第一个结果。我意识到这是因为每次 update 方法加载脚本时,它都会创建一个 InputManager 的新实例。

那么我该如何创建一个对象实例(比如 InputManager),并在每次调用 update 方法时保持相同的实例呢?

这样,我就可以像这样做:

input = nil

function initialize()
    input = InputManager()
end

function update()
    print(input.random)
end

而不必在调用 update 方法时拥有一个未定义的 input 实例。希望这一切都有意义,如果不行,我可以澄清!非常感谢您的帮助!

点赞