当前位置: 代码迷 >> 综合 >> xlua学习之路(二)xlua基础
  详细解决方案

xlua学习之路(二)xlua基础

热度:56   发布时间:2023-11-01 10:47:36.0

 

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);}

这是一个简单的案例

 

  相关解决方案