xLua是腾讯2016年初推出的开源手游热更新方案,腾讯现有很多手游均采用了该方案,加上自带鹅厂光环,所以一出生就备受关注。热更新是指应用程序在运行当中无需重启,便可执行相关更新操作,而市面上可供选择的热更新Lua插件有多种,ulua、slua、C#light、LSharp等。使用过xLua之后,你就会发现,其易用性、扩展性、C#与Lua之间的快速衔接等特性完全不弱于其他的Lua插件。
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)
描述:void Set (string key,T value)
描述:
LuaFunction类:用于访问Lua中的函数
object[] Call(params object[] args)
描述:object[] Call(object[] args, Type[] returnTypes)
描述:
C#中Lua文件加载
xlua.LuaEnv LuaEnv = new xLua.LuaEnv();
LuaEnv.DoString(“ require ‘Main.lua’ ”);
描述:自定义Loader
public delegate byte[] CustomLoader(ref string filepath);
public void LuaEnv.AddLoader(CustomLoader loader);
描述:LuaTable的遍历
xLua.LuaTable tbData = Lua.LuaEnv.NewTable();
TbData.ForEach<int,string>((I,value) =>
{
Debug.Log(“I = ”,i);
Debug.Log(“value = ”,value);
});
描述:C#访问Lua
Local newGameObj = CS.UnityEngine.GameObject();
luaenv.Global.Get<bool>("b");
xLua.LuaFunction func = Lua.LuaEnv.Global.Get<xLua.LuaFunction>(funcName);
描述:Lua访问C#
var newGameObj = new UnityEngine.GameObject();
local tmData = CS.UnityEngine.Time.deltaTime;
描述:
本文来自网易实践者社区,经作者毛晓威授权发布。