这边文章是看xlua官方教程和一些文档之后的一个总结,希望大家都能学会lua,当然最希望我能快点学会lua。。。
C#调用Lua
(1) LuaEnv
LuaEnv是C#中调用lua时需要用到的lua环境提示,需要在C#中使用Lua语法的时候就需要new一个LuaEnv。
下面这个案例展示了在C#中用Lua语法打印一句话:
public LuaEnv luaEnv;
// Start is called before the first frame update
void Start()
{
luaEnv = new LuaEnv();
luaEnv.DoString("print('这是一个lua语法的句子')");
}
输出结果如下:
(2)C#调用Lua语句和Lua文件
调用lua语句上面已经演示了,不再赘述。我们还可以通过读取文件的方式来访问lua文件,以下为代码演示:
public LuaEnv luaEnv;
private void Start()
{
var lua = Resources.Load<TextAsset>("LuaScripts/Test");
if (lua!= null)
{
luaEnv = new LuaEnv();
luaEnv.DoString(lua.text);
luaEnv.Dispose();
}
}
需要访问的文件是在Assets/Resources/LuaScripts下新增了一个text格式的文件,代码如下:
a=2
b=5
print("a+b="..a+b)
print("这是一段lua代码")
输出结果如下:
(3)使用Loader进行文件加载
这种方式的关键词是require。xLua自身有一些Loader可以用来添加文件,也可以自己添加loader。
Resources中的文件是可以通过自带的Loader进行加载的,不过前提是需要将文件的后缀改为.lua.text。
以下是代码演示:
public LuaEnv luaEnv;
private void Start()
{
luaEnv = new LuaEnv();
luaEnv.DoString("require 'Test'");
}
输出结果如下:
当然这无法满足我们的大多数需求,接下来我们来看自定义Loader,只涉及到一个接口:
public delegate byte[] CustomLoader(ref string filepath);
public void LuaEnv.AddLoader(CustomLoader loader)
以下是我们的案例代码:
我们将lua脚本移动到Resources下的LuaScripts文件中后,上面的xLua自带的Loader就找不到文件了。我们将这个脚本的后缀改为.bytes,然后使用如下C#代码进行调用。
public void Start()
{
LuaEnv luaEnv = new LuaEnv();
luaEnv.AddLoader(MyLoader);
luaEnv.DoString("require 'Assets/Resources/LuaScripts/Test.bytes'");//这一串有点长,实际使用中可以写个方法来获取,后续再总结一篇Xlua热更新框架的笔记
luaEnv.Dispose();
}
private byte[] MyLoader(ref string path)
{
return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(path));
}
输出结果如下:
(4)C#访问Lua的数据结构
luaenv.Global.Get<int>("a")
luaenv.Global.Get<string>("b")
luaenv.Global.Get<bool>("c")
还是上述的lua脚本,我们在C#脚本中用以下代码进行获取:
Debug.Log(luaEnv.Global.Get<int>("a"));
打印结果为2,成功访问到Lua中的变量的值。