Xlua学习笔记整理。还有很多没整理完,慢慢来。
文章目录
一.Xlua中Lua文件加载的两种方式
1.直接执行字符串:
LuaEnv env = new LuaEnv();
env.DoString("print('这是我的第一个lua程序'");
2.加载Lua文件
使用Require函数加载Lua文件
require就是一个个的调用Loader,查找出匹配的lua文件,然后执行该文件。
(1)使用默认Loader加载
LuaEnv env = new LuaEnv();
env.DoString("require 'SimpleLua' ");//不用加lua后缀
(2)使用自定义Loader加载
通过Addloader可以注册个回调,该回调参数是字符串,Lua代码里头调用require时,参数将会自动传给回调,
回调中就可以根据这个参数去加载指定文件,如果需要支持调试,需要把filepath修改为真实路径传出。
LuaEnv env = new LuaEnv();
env.AddLoader(CustomMyLoader);
env.DoString("require 'HelloWord'");
/// <summary>
/// 定义回调方法
/// 功能:
/// 本方法主要功能是自定义lua文件路径
/// </summary>
/// <param name="fileName">文件名称</param>
/// <returns></returns>
private byte[] CustomMyLoader(ref string fileName)
{
byte[] byArrayReturn = null;//返回数据
//定义lua路径
string luaPath = Application.dataPath + "/StreamingAssets/" + fileName + ".lua";
//读取lua路径中指定lua文件内容
string strLuaContent =File.ReadAllText(luaPath);
//数据类型转换
byArrayReturn = System.Text.Encoding.UTF8.GetBytes(strLuaContent);
return byArrayReturn;
}
注意:
1.使用默认Loader加载lua文件,必须放在Resources特殊目录下,否则查找不到无法加载。
2.因为Resource只支持有限的后缀,放Resource下的lua文件需要加上txt后缀。
3.自定义Loader可以进一步扩展加载路径,可以按照自己的方式进行加载lua与执行lua代码。
4.require本质是按照既定的查找顺序,找到需要的lua程序,否则返回nil,然后报错。
二.CsharpCallLua
主要是C#调用Lua的全局数据类型,包括字段,table,函数。
最大特点: env.Global.Get调用lua中的表,字段,函数。
---- 1.全局字段
访问LuaEnv.Global就可以了,上面有个模版Get方法,可指定返回的类型。
eg:
Lua
str="全局变量"
number=10
C#
string str1 = env.Global.Get<string>("str");//字符串类型
int number = env.Global.Get<int>("number");//数字类型
---- 2.全局table
由于Lua中Table可以充当很多职能,如数组,字典(键值对),类(Class)。根据其职能不同调用也不同。
-------- (1).table为数组时
直接映射到List
eg:
Lua
progamLanguage={"C#","Lua","C++","C"}
C#
List<object> listGameLan = env.Global.Get<List<object>>("progamLanguage");
-------- (2).table为字典时(键值对)
直接映射到Dictionary<string, object>
eg:
Lua
gameLanguage={str1="C#语言",str2="lua语言",str3="C++语言",str4="C语言"}
C#
Dictionary<string, object> dicGameLan = env.Global.Get<Dictionary<string, object>>("gameLanguage")