跳到主要内容

介绍

ZLua 是一个针对 Unity Il2Cpp 极致优化的现代原生 Lua 方案。

它用清晰的规则统一 C# 与 Lua 的双向调用,把 Lua 当作另一种 Native——类比 P/Invoke,提供 LuaAppDomain.GetFunction[LuaMarshalAs] 等概念,屏蔽底层易错的 Lua C API。

为什么选择 ZLua

相对 xLua / toLua / SLua,ZLua 的核心主张是:

更易用现代、简单、零配置(无 per-type C# Wrap 白名单)
更完备几乎覆盖全部常用 C#↔Lua 特性(泛型、重载、ref/out、数组、delegate…)
更高效Il2Cpp 四方实测:Lua→C# 上 xLua / toLua / SLua 约 2.57× / 3.52× / 7.68×(相对 ZLua);详见 性能对比
更少 GC引用类型与 struct 默认 0 GC;OpaqueValue 等灵活策略
极小桥接同签名合并的 C++ stub;体积可小一个数量级;可至 0 桥接函数
版本更广Lua 5.1–5.5 / LuaJIT(Il2Cpp 上 JIT 仅 Android / iOS);Unity 2021+;团结引擎
维护更积极全职专业团队

完整论述见 为什么选择 ZLua;四方对照见 选型对比

核心特性

能力说明
Lua → C#CSharp 根表懒加载;字段/方法/属性;泛型与数组;重载;add_/remove_ 订阅 event
C# → LuaLuaAppDomain.GetFunction<T> 取得 Delegate 后 Invoke
双运行时Mono(Editor)与 Il2Cpp(Player)均已完成;语义一致、实现路径不同
MarshalByVal / ByObj / Opaque 等路径,见 Marshal 规范

:::info 当前状态 Mono · 已完成Il2Cpp · 已完成

日常在 Editor(Mono) 开发;发版与性能以 Il2Cpp Player 为准(构建前 ZLua/Generate/All)。详见 项目状态。 :::

下一步