拿到 Lua 函数
[CSharpCallLua] 标记 delegate 类型。调用链
__Gen_Delegate_Imp* 模板方法。关键组件
注册 C# 方法
[LuaCallCSharp] 标记类型,xLua 将方法暴露给 Lua VM。CS.Type.Method()。调用链
CS.UnityEngine.Debug.Log("Hello")"Hello" 转成 C# stringDebug.Log()关键组件

| 场景 | 本质流程 | 桥接/适配组件 |
|---|---|---|
| C# 调 Lua | 参数压栈 → 调 Lua 函数 → 返回值取出 | DelegateBridge + ObjectTranslator |
| Lua 调 C# | Lua 参数出栈 → 调 C# 方法 → 返回值压回 | ObjectTranslator + LuaCallCSharp |
Lua 和 C# 的交互,本质上就是通过 Lua 栈传递参数和结果。
- C# 调 Lua:传参数过去,拿结果回来;
- Lua 调 C#:把参数传给 C# 方法,结果再压回 Lua 栈。
C# 调 Lua 时,会通过 DelegateBridge 作为桥接类,把 C# delegate 映射到 Lua function,参数和返回值交给 ObjectTranslator 做类型转换。
Lua 调 C# 时,依赖 LuaCallCSharp 注册机制,Lua VM 调用时 ObjectTranslator 会把 Lua 栈参数转成 C# 类型,方法执行完结果再压回 Lua 栈。
所以本质就是 栈传递 + 类型翻译 + 桥接调用。
本文作者:xuxuxuJS
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!