xlua - lua调用c#函数
c# 部分
public class Test5Obj { public int i; private string str; public Test5Obj() { } public void PrintInt() { Debug.Log($"c# PrintInt:{i}"); } public void PrintStr() { Debug.Log($"c# PrintStr:{str}"); } }
public class Test5 : MonoBehaviour { private LuaEnv m_LuaEnv; void Start() { m_LuaEnv = new LuaEnv(); m_LuaEnv.AddLoader((ref string filePath) => { filePath = filePath.Replace('.', '/'); filePath = $"Assets/{filePath}.lua.txt"; var txtAsset = AssetDatabase.LoadAssetAtPath<TextAsset>(filePath); return Encoding.UTF8.GetBytes(txtAsset.text); }); m_LuaEnv.Global.Set("Test5MonoInst", this); m_LuaEnv.DoString("require('Lua.Test5')"); } void OnDestroy() { if (null != m_LuaEnv) m_LuaEnv.Dispose(); } public void DoPrint(Test5Obj obj) { obj.PrintInt(); obj.PrintStr(); } }
lua脚本:
c#函数参数为class或struct时,如果lua提供的参数值为table,xlua会利用table来创建class或struct对象(所有public field会用table的同名字段初始化)
Test5MonoInst:DoPrint({ i = 5, str = "abc" }) --i为public字段, 会被初始化; str为private字段, 不会被初始化
lua脚本:
table的函数,默认不会覆盖掉class或stuct的函数
local Test5Obj = {} Test5Obj.__index = Test5Obj function Test5Obj.new() local obj = { i = 6, str = "def" } setmetatable(obj, Test5Obj) return obj end function Test5Obj:PrintInt() print("PrintInt") end function Test5Obj:PrintStr() print("PrintStr") end local obj = Test5Obj.new() Test5Mono:DoPrint(obj)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!