如何自动初始化组件参数?
2021-12-19 15:47:39
收藏:0
阅读:294
评论:1
在制作一个使用.lua文件读取参数值的游戏引擎时,我卡住了,因为我需要读取这些值并将它们分配给C++中每个组件的参数。我试图调查Unity是如何做的,但我没有找到它(我开始怀疑Unity是否需要这样做)。
我希望参数能够自动初始化,而无需用户为每个参数执行以下处理:
myComponentParameter = readFromLuaFile("myParameterName")
我的最初想法是使用std::variant类型,并存储变量数组以自动读取它们。我遇到的问题是:
- 首先,我不知道std::variant在当前存储的类型是什么(尝试了std::variant :: type,但对于模板不起作用),以便从非类型化的.lua值转换为C++值。参考一下,我的组件初始化看起来像这样:
bool init(luabridge :: LuaRef parameterTable)
{
myIntParameter = readVariable <int>(parameterTable,“myIntParameter”);
myStringParameter = readVariable <std :: string>(parameterTable,“myStringParameter”);
返回true;
}
(readVariable函数已经在这个问题中编写[链接](https://stackoverflow.com/questions/67300592/read-a-list-of-parameters-from-a-luaref-using-luabridge),如果您有兴趣)
第二个问题是,用户需要编写_std :: get(myIntParameter);_,每次他们想访问由variant存储的值,这听起来比让用户阅读参数值更糟糕。
第三个问题是,我无法创建一个_std :: variant <任何类型> _的数组,这是我希望做的以自动初始化参数。
在这种情况下,有没有好的解决方案使init函数不是必需的,并且用户不需要手动设置参数值?
谢谢。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

让我们进一步解释我的评论。简而言之,您需要从
-“用户在某个文件中输入了一些内容”
到:
-“客户端代码可以读取该值而无需使用std :: get”
…这大致意味着:
-“输入验证已完成,值已准备好进行直接使用。”
…这意味着您不会将变量存储在variant中。
最终这是一个设计问题。某个模块必须知道哪些变量名存在以及每个变量名的类型和有效值。
-该模块的输入将是未经验证的值。
-该模块的输出可能是一些常规的c ++结构。
-该模块的主体可能会有一堆这些内容:
config.foo = readVariable <int>(“foo”); config.bar = readVariable <std :: string>(“bar”); //您还想在那里验证值-并非所有整数都可能是foo的有效值, //也许bar必须遵循某些特定规则,等等。假设在其他地方定义为:
结构配置{ int fooVariable; std :: string bar; };该模块的位置取决于您的应用程序。如果所有预期类型都已知,则没有理由使用“变量”,直接解析。
如果一些事情直到以后才有意义,则可以将其读取为variant。例如,如果您想读取插件将使用的配置值,则尚不能理解它们。
(实际上,即使是稍后重新解析文件或仅将值保存为文本以供以后解析也可以使用)