文章目录
- LuaBridge 3 完整介绍 + 快速上手使用
- 一、核心介绍
- 1. 是什么?
- 2. 能做什么?
- 3. 优势
- 二、安装 / 集成
- 1. 下载
- 2. 只需做两件事
- 3. 依赖
- 三、最常用 4 大功能(直接复制跑)
- 1. 初始化 Lua 环境
- 2. C++ 调用 Lua 函数
- Lua 脚本(test.lua)
- C++ 调用
- 3. Lua 调用 C++ 函数
- 4. 把 C++ 类暴露给 Lua(最常用!)
- Lua 使用
- 四、高级常用功能
- 1. C++ 访问 Lua Table
- 2. Lua 访问 C++ 容器(vector/map)
- 3. 类的静态属性/方法
- 4. 多返回值
- 五、编译命令(g++)
- 六、LuaBridge 3 总结(超精简)
LuaBridge 3 完整介绍 + 快速上手使用
LuaBridge 3 是目前最轻量、最简单、无依赖的C++ ↔ Lua 绑定库,专门用来在 C++ 里调用 Lua、或者在 Lua 里调用 C++ 函数/类,是游戏、插件系统、脚本化逻辑最常用的库。
我给你整理最实用、能直接复制跑的版本,不讲废话。
一、核心介绍
1. 是什么?
- 纯头文件库(只需 1 个文件夹,无需编译)
- 支持 C++11 及以上
- 支持 Lua 5.1 / 5.2 / 5.3 / 5.4 / LuaJIT
- 无第三方依赖
- 性能极高、体积极小
- 语法非常简洁,比 LuaBind、Sol2 更轻更快
2. 能做什么?
- 在C++ 调用 Lua 函数
- 在Lua 调用 C++ 函数
- 把C++ 类暴露给 Lua(成员函数、成员变量、构造函数)
- 共享数据:int/float/string/table/userdata 自动转换
- 做游戏逻辑、热更新、插件系统、配置脚本
3. 优势
✅ 纯头文件
✅ 编译极快
✅ 语法自然
✅ 体积小(几十 KB)
✅ 稳定、无坑
✅ 游戏行业大量使用
二、安装 / 集成
1. 下载
https://github.com/kunitoki/LuaBridge3
2. 只需做两件事
- 把
Source/LuaBridge/整个目录加入头文件路径 - 包含头文件:
#include"LuaBridge/LuaBridge.h"3. 依赖
你必须自己集成 Lua 库(Lua 5.4 最常用)
三、最常用 4 大功能(直接复制跑)
1. 初始化 Lua 环境
#include<iostream>#include"LuaBridge/LuaBridge.h"intmain(){// 1. 创建Lua状态机lua_State*L=luaL_newstate();luaL_openlibs(L);// 打开Lua标准库// ========== 你的绑定代码写这里 ==========// 关闭lua_close(L);return0;}2. C++ 调用 Lua 函数
Lua 脚本(test.lua)
functionadd(a,b)returna+bendC++ 调用
// 加载Lua文件luaL_dofile(L,"test.lua");// 调用 Lua 函数 add(10, 20)autores=luabridge::getGlobal(L,"add")(10,20);intsum=res;// 自动转intstd::cout<<sum<<std::endl;// 输出 303. Lua 调用 C++ 函数
// 定义C++函数intcpp_add(inta,intb){returna+b;}// 绑定到Lua全局luabridge::getGlobalNamespace(L).addFunction("cpp_add",cpp_add);然后 Lua 就能直接调用:
localres=cpp_add(100,200)print(res)-- 3004. 把 C++ 类暴露给 Lua(最常用!)
// 一个C++类classPlayer{public:inthp;std::string name;Player(std::string n,inth):name(n),hp(h){}voidattack(){std::cout<<name<<" 攻击!\n";}};// 绑定到Lualuabridge::getGlobalNamespace(L).beginClass<Player>("Player").addConstructor<void(*)(std::string,int)>()// 构造函数.addData("hp",&Player::hp)// 成员变量.addData("name",&Player::name).addFunction("attack",&Player::attack)// 成员函数.endClass();Lua 使用
localp=Player("小明",100)print(p.name,p.hp)p:attack()p.hp=80print(p.hp)四、高级常用功能
1. C++ 访问 Lua Table
localcfg={speed=10,name="test"}autotbl=luabridge::getGlobal(L,"cfg");intspeed=tbl["speed"];std::string name=tbl["name"];2. Lua 访问 C++ 容器(vector/map)
LuaBridge 3 原生支持:
std::vector<int>vec={1,2,3};luabridge::push(L,vec);lua_setglobal(L,"vec");Lua:
print(vec[1],vec[2],vec[3])3. 类的静态属性/方法
.addStaticData("static_val",&MyClass::static_val).addStaticFunction("static_func",&MyClass::static_func)4. 多返回值
C++:
luabridge::LuaReffunc(luabridge::newTable(L));func["x"]=100;func["y"]=200;returnfunc;Lua 直接接收 table。
五、编译命令(g++)
g++-std=c++11 main.cpp-otest-llua-ldl六、LuaBridge 3 总结(超精简)
- 纯头文件、轻量、无依赖
- C++ ↔ Lua 双向调用
- 类、函数、变量、table、vector 全支持
- 游戏/脚本/热更首选
- 比 Sol2 轻,比 LuaBind 简单
如果你愿意,我可以直接给你:
✅可直接编译运行的完整 Demo 项目
✅LuaBridge + Lua 5.4 一键集成 CMake 模板
✅游戏里最常用的脚本框架