下载XLua: https://github.com/tencent/xlua
项目中使用XLua只需将Plugins和XLua两个文件夹拷贝到U3D中即可
XLua只是核心,用于实现Lua和C#交互,但是并没有提供便捷的"框架",我们在项目中使用XLua的话,需要自己实现框架部分,这样才能实现"从服务器端下载AB和Lua资源,完成客户端的热更新"
C#调用Lua
using XLua;
//一个LuaEnv实例就是一个Lua虚拟机,建议全局唯一
LuaEnv luaEnv = new LuaEnv();
luaEnv.DoString("print('test')");
C#调用外部Lua代码文件
在XLua\Resources文件夹下创建lua文件,文件的后缀是txt;XLua中完整的Lua文件名格式:fileName.lua.txt
然后在C#代码中用Lua虚拟机的DoString方法加载执行该lua文件:
luaEnv.DoString("require 'extraTestLua'");//不需要写路径和后缀
C#获取Lua代码中的数据
luaEnv.Global.Get<int>("a"); //获取lua中的数值
luaEnv.Global.Get<string>("b"); //获取Lua中的字符串
luaEnv.Global.Get<bool>("c"); //获取lua中的布尔
luaEnv.Global.Get<LuaFunction>("d"); //获取lua中的方法
Lua调用C#
CS.UnityEngine.GameObject
CS.UnityEngine.Debug.Log()
CS.UnityEngine.GameObject.Find()
//Lua调用C#,需要在C#的命名空间之前要加前缀: CS.
LuaEnv luaEnv = new LuaEnv(); //lua运行虚拟机 //luaEnv.DoString("print('hellow')"); luaEnv.DoString("require 'extraTestLua'");//C#调用外部Lua代码文件,不需要写路径和后缀 int a = luaEnv.Global.Get<int>("a"); //获取lua中的数值 string b = luaEnv.Global.Get<string>("b"); //获取Lua中的字符串 bool c = luaEnv.Global.Get<bool>("c"); //获取lua中的布尔 LuaFunction d = luaEnv.Global.Get<LuaFunction>("d"); //获取lua中的方法 d.Call(); string luaScript = @" local GameObject = CS.UnityEngine.GameObject local Debug = CS.UnityEngine.Debug local player = GameObject('xxxxx') Debug.Log(player.name) local camera = GameObject.Find('Main Camera') Debug.Log(camera.name) "; luaEnv.DoString(luaScript);