lua文件加载
1.执行字符串
XLua.LuaEnv luaenv = new XLua.LuaEnv();
luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')");
luaenv.Dispose();
1、DoString参数为string,可输入任意合法的Lua代码,本示例在lua里调用C#的UnityEngine.Debug.Log打印了个日志。
2、一个LuaEnv实例对应Lua虚拟机(lua环境),出于开销的考虑,建议全局唯一。
2.加载lua文件
1.拖拽lua文本
public TextAsset luaScript;public LuaEnv luaEnv = new LuaEnv();private LuaTable scriptEnv;void Awake(){scriptEnv = luaEnv.NewTable();// 为每个脚本设置一个独立的环境,可一定程度上防止脚本间全局变量、函数冲突LuaTable meta = luaEnv.NewTable();meta.Set("__index", luaEnv.Global);scriptEnv.SetMetaTable(meta);meta.Dispose();scriptEnv.Set("self", this);luaEnv.DoString(luaScript.text, "LuaBehaviour", scriptEnv);}
2.用lua的require函数即可
luaEnv.DoString("require 'Load'")
require实际上是调一个个的loader去加载,有一个成功就不再往下尝试,全失败则报文件找不到。 目前xLua除了原生的loader外,还添加了从Resource加载的loader,需要注意的是因为Resource只支持有限的后缀,放Resources下的lua文件得加上txt后缀(见附带的例子)。
建议的加载Lua脚本方式是:整个程序就一个DoString("require 'main'"),然后在main.lua加载其它脚本(类似lua脚本的命令行执行:lua main.lua)
3.自定义Loader
在xLua加自定义loader是很简单的,只涉及到一个接口:
public delegate byte[] CustomLoader(ref string filepath);
public void LuaEnv.AddLoader(CustomLoader loader)
luaEnv.AddLoader(Loader);luaEnv.DoString("require 'Load'", "CustumLoader", scriptEnv);public byte[] Loader(ref string fileName){string path = Application.streamingAssetsPath+"/" + fileName + ".lua.txt";string context = File.ReadAllText(path);return System.Text.Encoding.UTF8.GetBytes(context);}
这是一个简单的案例