本文共 2338 字,大约阅读时间需要 7 分钟。
01:执行字符串
void Start() { //第一和第三行分别LuaEnv的创建以及销毁,所谓LuaEnv可以理解为lua虚拟机,往往整个工程一个虚拟机即可; // DoString里头可以是任意合法的lua代码,例子中调用了UnityEngine.Debug.Log接口打印了一个log(C#的静态函数在CS下直接可用) XLua.LuaEnv luaenv = new XLua.LuaEnv(); luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')"); //lua调用C#的函数(CS) luaenv.DoString("print[[大地]]"); luaenv.Dispose(); }02:加载运行lua源文件 1创建hellow.lua.txt文件 2里面输入内容
print("Hellow world by luafile")a=100b=100print(a+b)3 Hellow.lua.txt放入Resources文件夹 4:创建脚本LoadLuaFile
private XLua.LuaEnv luaenv; void Start() { //加载lua文件 TextAsset text=Resources.Load("hellow.lua"); //helllow.lua.txt luaenv = new XLua.LuaEnv(); luaenv.DoString(text.text); luaenv.Dispose(); }
4运行控制台输出内容
03:通过内置的loader加载lua源文件private XLua.LuaEnv luaenv; void Start() { luaenv = new XLua.LuaEnv(); //require 实际上是调一个个的 loader 去加载,有一个成功就不再往下尝试,全失败则报//文件找不到 luaenv.DoString("require [[hellow]] "); luaenv.Dispose(); }
04:添加自定义的Loader方法
在 xLua 加自定义 loader 是很简单的,只涉及到一个接口: public delegate byte[] CustomLoader(ref string filepath); public void LuaEnv. AddLoader(CustomLoader loader) 通过 AddLoader 可以注册个回调,该回调参数是字符串,lua 代码里头调用 require 时, 参数将会透传给回调,回调中就可以根据这个参数去加载指定文件,如果需要支持调试,需 要把 filepath 修改为真实路径传出。该回调返回值是一个 byte 数组,如果为空表示该 loader 找不到,否则则为 lua 文件的内容。 有了这个就简单了,用 IIPS 的 IFS?没问题。写个 loader 调用 IIPS 的接口读文件内容 即可。文件已经加密?没问题,自己写 loader 读取文件解密后返回即可void Start() { LuaEnv luaEnv = new LuaEnv(); luaEnv.AddLoader(Myloader); luaEnv.DoString("require [[hellow]] "); luaEnv.Dispose(); } public byte[] Myloader(ref string filepath) { string code = "print(666)"; return System.Text.Encoding.UTF8.GetBytes(code); }05:自定义Loader加载指定目录的Lua脚本
在StreamingAssets文件夹创建文本haha.lua.txt
文本内容是print("ha ha ha")
void Start() { LuaEnv luaEnv = new LuaEnv(); luaEnv.AddLoader(Myloader); luaEnv.DoString("require [[haha]] "); luaEnv.Dispose(); } public byte[] Myloader(ref string filepath) { string path = Application.streamingAssetsPath + "/haha.lua.txt"; string str = ""; using (StreamReader reader=new StreamReader(path)) { str = reader.ReadToEnd(); } return System.Text.Encoding.UTF8.GetBytes(str); }
转载地址:http://anrxo.baihongyu.com/