跳到主要内容

常见问题

按主题分类;未覆盖见 排错指南GitHub Issues

一般

ZLua 与 xLua 有什么区别?

ZLua 在 Il2Cpp 内嵌 Lua、C++ 直桥,不生成 per-type C# Wrap(Player 生成 C++ stub)。类型访问用 CSharp 根表,C# 调 Lua 用 LuaAppDomain.GetFunction<T>。见 为什么选择 ZLua选型对比从 xLua 迁移

Mono 和 Il2Cpp 差别有多大?

Lua 可见语义一致Mono(Editor)与 Il2Cpp(Player)均已完成;实现路径不同(Emit vs C++ stub)。见 项目状态

当前适合上生产吗?

Il2Cpp Player 可用于完整语义验证与发布;接受 libil2cpp 集成ZLua/Generate/All。Hotfix 等 xLua 专长需自建。见 兼容性

支持哪些 Unity / Lua 版本?

兼容性。PUC-Rio 5.1–5.5 已支持;LuaJIT 已支持,但 Il2Cpp Player 仅 Android / iOS(细则见 LuaJIT 构建)。


安装与工程

如何安装 ZLua?

UPM:"com.code-philosophy.zlua": "https://github.com/focus-creative-games/zlua.git"。见 安装zlua-demo

发布前要 Generate 吗?

Il2Cpp:要。 菜单 ZLua/Generate/All 生成 C++ MethodBridge 等 Lua→C# stub,不是 xLua 式 C# Wrap。Editor Mono 不依赖该 C# Wrap 流程。C#→Lua 无 Generate 步骤。

Lua 脚本放哪里?

项目根 LuaScripts/*.lua(Editor);Player Sync 到 StreamingAssets/LuaScripts/*.lua.txt


类型与语法

含 namespace 的类型怎么访问?

CSharp.AC['MyGame.UI.Panel'],不能链式点号穿越 namespace。

Event 怎么订阅?

.get / .set 专用表。使用 obj:add_OnX(handler) / obj:remove_OnX(handler)。见 Event

ref / out 怎么用?

Lua→C#:ByVal userdata 或 Opaque 可写回;裸 number 不回写。C#→Lua byref 默认 Opaque。见 ref/out/inBYREF


互操作

如何从 C# 调用 Lua?

LuaAppDomain.GetFunction<T>("module","method") 取得 Delegate 后 Invoke。见 C# 调用 Lua

方法重载怎么选?

默认 demo:Run(10) 走 dispatch;精确点名用全签名键 demo['Run(System.Int32)'](demo, 10);热路径短名用 [LuaAlias]register_method 后再 demo:run_i32(10)。见 方法重载

Lua 如何传回调给 C#?

直接传 function。见 Function 与 Delegate


Player / 发布

Editor 正常 Player 失败?

检查:是否 Generate;Lua 是否 Sync;是否使用已废弃 Event API。见 Editor vs Player排错

Player 性能如何?

以 Il2Cpp 为准。公开四方基准:zlua-benchmark;摘要见 PERFORMANCE;最新完整报告:comparison_20260728_121554.md


相关文档