0

[解决]

我正在构建一个使用 LuaBridge 来读取实体组件的游戏引擎。在我的引擎中,一个实体文件如下所示,其中“组件”是我的实体拥有的组件的列表,其余参数用于设置每个单独组件的值:

-- myEntity.lua

Components = {"MeshRenderer", "Transform", "Rigidbody"}

MeshRenderer = {
    Type = "Sphere",
    Position = {0,300,0}
}

Transform = {
    Position = {0,150,0},
    Scale = {1,1,1},
    Rotation = {0,0,0}
}

Rigidbody = {
    Type = "Sphere",
    Mass = 1
}

我目前正在使用这个函数(在 C++ 中)来从 LuaRef 中的参数(给定它的名称)中读取值。

template<class T>
T readParameter(LuaRef& table, const std::string& parameterName)
{
    try {
        return table.rawget(parameterName).cast<T>();
    }
    catch (std::exception e) {
        // std::cout ...
        return NULL;
    }
}

例如,当调用readVariable<std::string>(myRigidbodyTable, "Type")时,myRigidbodyTable是具有 Rigidbody 值的 LuaRef,此函数应返回值为“Sphere”的std::string 。

我的问题是,当我完成读取和存储 Transform 组件的值时,当我想读取“Ridigbody”的值并且我的引擎读取值“Type”时,Stack::push(lua_State) 会引发未处理的异常* L, const std::string& str, std::error_code&)。

我很确定这与我的组件 Transform 存储“位置”等参数的值列表这一事实有关,因为在读取每个参数只有一个值的组件时我没有遇到任何问题。这样做的正确方法是什么,以防我做错了什么?

我还想指出,我是 LuaBridge 的新手,所以这可能是一个初学者问题,我一直找不到解决方案。任何帮助表示赞赏:)

4

1 回答 1

0

发现问题,我没有正确阅读表格。代替

LuaRef myTable = getGlobal(state, tableName.c_str());

我正在使用以下

LuaRef myTable = getGlobal(state, tableName.c_str()).getMetatable();
于 2021-04-28T21:04:09.300 回答