使用 LuaBridge 从 LuaRef 读取参数列表
Posted
技术标签:
【中文标题】使用 LuaBridge 从 LuaRef 读取参数列表【英文标题】:Read a list of parameters from a LuaRef using LuaBridge 【发布时间】:2021-07-21 19:57:07 【问题描述】:[已解决]
我正在构建一个使用 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<: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 的新手,所以这可能是一个我一直无法找到的解决方案的初学者问题。任何帮助表示赞赏:)
【问题讨论】:
【参考方案1】:发现问题,我没有正确阅读表格。而不是
LuaRef myTable = getGlobal(state, tableName.c_str());
我用的是下面的
LuaRef myTable = getGlobal(state, tableName.c_str()).getMetatable();
【讨论】:
以上是关于使用 LuaBridge 从 LuaRef 读取参数列表的主要内容,如果未能解决你的问题,请参考以下文章