使用uLua通过c#获取Lua脚本中的全局变量,函数,Table表

第一种创建物体方式    
    //string demo = @"
    //   luanet.load_assembly('UnityEngine')
    //   GameObject = UnityEngine.GameObject
    //   PrimitiveType = UnityEngine.PrimitiveType
    //   GameObject.CreatePrimitive(PrimitiveType.Cube);
    //    ";

#region   第二种创建物体与添加组件
    const string demo = @"
            luanet.load_assembly('UnityEngine')  ----加载UnityEngine程序集
            GameObject = luanet.import_type('UnityEngine.GameObject')  ----获取GameObject类
            PrimitiveType = luanet.import_type('UnityEngine.PrimitiveType')  ----获取PrimitiveType类
            Rigidbody  =luanet.import_type('UnityEngine.Rigidbody')  ----获取Rigidbody类并赋值给一个变量Rigidbody

            obj = GameObject('KO');   ---使用GameObject构造创建一个空物体名为KO


            local cube =GameObject.CreatePrimitive(PrimitiveType.Cube)    ----创建Cube
            cube:AddComponent(luanet.ctype(Rigidbody));   ----给Cube添加一个Rigidbody类型的组件   'luanet.ctype(组件名称)获取类型' 
             ";
    #endregion
    
    #region   获取全局 变量  
    const string script1 = @"
             a = 100
             b = '张'
             arr = {2,545,64878,454,5642,15,4}   ----表
             key = {key1 = 10,key2 = 20,key3 = '张'}
           ";
    #endregion

  //public TextAsset text;  //一个txt文档  包含lua代码   起名时必须是xxx.lua.txt
  void Start(){
     LuaScriptMgr uLuaState = new LuaScriptMgr();   //uLua反射虚拟机
     uLuaState.Start();
     uLuaState.DoString(demo);


        LuaState ls = new LuaState();
        //ls.DoString(text.text); // 执行text文档
        ls.DoString(script1);
        double a = ls.GetNumber("a");
        print("a:" + a);
        string b = ls.GetString("b");
        print("b:" + b);
        ListDictionary lisDic = ls.GetTableDict(ls.GetTable("key")); --获取带有key键的元素
        print("lisDic;>>"+lisDic["key1"]);

        LuaTable table = ls.GetTable("arr");   ----获取表 不含有key值的元素
        for (int i = 1; i < table.Count; i++) 
        {
            print(">>:"+table[i]);
        }

    }

class   Lua_Table{    

 //通过c#获取lua函数中的多个返回值

// 定以一个变量来编写Lua代码

const string script = @"
            function ArrFun(objs,legths)
                  for  i=0,legths-1  do
                       print(objs[i])
                  end
                local arr = { 1,2,3,4,5,6}
                return  unpack(arr)     

end
            ";
    object[] objs = { 1, 2, 3, 4, 5, 6 };
    void Start()
    {

        LuaScriptMgr uLuaState = new LuaScriptMgr();   //uLua反射虚拟机
        uLuaState.Start();
        LuaState luastate = uLuaState.lua;
        luastate.DoString(script);
        LuaFunction l = luastate.GetFunction("ArrFun");   //GetFunction通过Lua脚本中函数名获取
        object[] o = l.Call(objs, objs.Length);  // Call对获取到的函数是否进行参数赋值,若有参数则必须赋值,没有无需赋值  获取多个返回值
        l.Release();   
        for (int i = 0; i < o.Length; i++)
        {
            print(">>>:" + o[i].ToString());   

        }

  }

 

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值