xLua快速入门

达芬奇密码2018-07-19 09:56

xLua是腾讯2016年初推出的开源手游热更新方案,腾讯现有很多手游均采用了该方案,加上自带鹅厂光环,所以一出生就备受关注。热更新是指应用程序在运行当中无需重启,便可执行相关更新操作,而市面上可供选择的热更新Lua插件有多种,ulua、slua、C#light、LSharp等。使用过xLua之后,你就会发现,其易用性、扩展性、C#与Lua之间的快速衔接等特性完全不弱于其他的Lua插件。

xLua中的常用API结构类型解析

LuaEnv类:主要用于加载代码块,加载Lua文件等

  • object[] DoString(string chunk, string chunkName = "chuck", LuaTable env = null)
    

    描述:
    执行一个代码块
    参数: chunk: Lua代码,必须符合Lua语法规则; chunkName: 发生error时的debug显示信息中使用,指明某某代码块的某行错误; env :为这个代码块;
    返回值:
    代码块里return语句的返回值

  • T LoadString<T>(string chunk, string chunkName = "chunk", LuaTable env = null)
    

    描述:
    加载一个代码块,但不执行,只返回类型可以指定为一个delegate或者一个LuaFunction
    参数:
    chunk: Lua代码;
    chunkName: 发生error时的debug显示信息中使用,指明某某代码块的某行错误;
    env :这个代码块;
    返回值:
    代表该代码块的delegate或者LuaFunction类

LuaTable类:类似JAVA中的字典,由键/值对组成

  • T Get<T>(string key)
    
    描述:
    获取在key下,类型为T的value,如果不存在或者类型不匹配,返回null
  • void Set (string key,T value)
    
    描述:
    获取在key下,类型为T的value,如果不存在或者类型不匹配,返回null

LuaFunction类:用于访问Lua中的函数

  • object[] Call(params object[] args)
    
    描述:
    以可变参数调用Lua函数,并返回该调用的返回值
  • object[] Call(object[] args, Type[] returnTypes)
    
    描述:
    调用Lua函数,并指明返回参数的类型,系统会自动按指定类型进行转换

xLua中的常用方法

  • C#中Lua文件加载

    • xlua.LuaEnv LuaEnv = new xLua.LuaEnv();  
      LuaEnv.DoString(“ require ‘Main.lua’ ”);
      
      描述:
      Main.lua为对应的Lua文件名
  • 自定义Loader

    • public delegate byte[] CustomLoader(ref string filepath);  
      public void LuaEnv.AddLoader(CustomLoader loader);
      
      描述:
      该接口一般用于Lua文件是通过网络下载或需要进行解密等操作需求。通过AddLoader可以进行注册回调,通过回调加载指定文件
  • LuaTable的遍历

    • xLua.LuaTable tbData = Lua.LuaEnv.NewTable();  
      TbData.ForEach<int,string>((I,value) =>  
      {  
        Debug.Log(“I = ”,i);  
        Debug.Log(“value = ”,value);  
      });
      
      描述:
      tbData为LuaTable类型,ForEach后面跟的是tbData中参数的键值对
  • C#访问Lua

    • 创建一个对象
      Local newGameObj = CS.UnityEngine.GameObject();
      
    • 访问全局的数据类型或方法
      luaenv.Global.Get<bool>("b");  
      xLua.LuaFunction func = Lua.LuaEnv.Global.Get<xLua.LuaFunction>(funcName);
      
      描述:
      常用LuaEnv.Global来访问所需的数据类型或方法,b为所求变量,funcName为查找的函数名
  • Lua访问C#

    • 创建一个对象
      var newGameObj = new UnityEngine.GameObject();
      
    • 访问对象或方法
      local tmData = CS.UnityEngine.Time.deltaTime;
      
      描述:
      C#相关的函数、方法及静态成员属性等在CS下,所以只需访问对应命名空间的对应类或方法即可

xLua使用建议

  • 在Lua和C#之间转换数据的时候一定要注意数据类型的正确
  • LuaTable中序列是从1开始的,并不是从0开始
  • xLua还在更新迭代,不能保证完全没有问题,但是看Git上的更新效率还是很快的
  • 笔者只列出了常用的部分,详细的可以上Git,如有问题,欢迎指正

GitHub地址

本文来自网易实践者社区,经作者毛晓威授权发布。