lua学习笔记4--XLua

下载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);

猜你喜欢

转载自www.cnblogs.com/xianguoguo/p/11606532.html