拿到 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 许可协议。转载请注明出处!