Lua解析器作用:让unity能够执行lua语言
(一)导入xlua步骤:
xlua源代码中assets文件夹中的plugins文件夹和xlua文件夹,放到unity工程中的asset目录下,xlua中的tools文件夹,放在项目的asset目录的同级目录下。
然后配置playersetting,最后编辑器会出现热补丁注入的选项,如图所示
测试脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;//要添加这个命名空间
public class LuaEnvTest : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
LuaEnv luaEnv = new LuaEnv();
luaEnv.DoString("print('你好呀,lua')");
}
// Update is called once per frame
void Update()
{
}
}
弄好后的测试结果:
(二)解析器常用函数,以及用解析器在默认的Resource文件夹下加载lua文件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;//要添加这个命名空间
public class LuaEnvTest : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
//一般情况下,保持唯一性,可以提升性能
LuaEnv luaEnv = new LuaEnv();
//让解析器执行一个lua文件脚本,默认寻找的脚本是在Resources文件夹下,后缀.lua.txt才能被读取到
luaEnv.DoString("require('Main')");
//luaEnv.DoString("print('你好呀,lua')");
//luaEnv.DoString("print('nihao')","LuaEnvTest"),第二个参数可以知道是哪个文件出了问题
//清楚没有手动释放的对象,相当于垃圾回收
//在帧更新中定时执行,但不是每帧执行,每帧执行耗性能,或者切换场景的时候执行。
luaEnv.Tick();
//销毁解析器
luaEnv.Dispose();
}
}
Main文件:
```lua
print("nihao lua")
结果:

(三)自定义加载器
require的执行顺序是,先去找自定义的加载器,如果没有返回空,就去默认加载路径Resources的里面找,
好处:自定义文件夹路径,不用改lua文件后缀。
```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;//要添加这个命名空间
using System.IO;
public class LuaEnvTest : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
//一般情况下,保持唯一性,可以提升性能
LuaEnv luaEnv = new LuaEnv();
//自定义加载器,注意当有了自定义加载器,require的执行顺序是,先去找自定义的加载器,如果没有返回空,就去默认加载路径Resources的里面找
//且自定义加载器要写在dostring前面
luaEnv.AddLoader(MyCustomLoader);
//让解析器执行一个lua文件脚本,默认寻找的脚本是在Resources文件夹下,后缀.lua.txt才能被读取到
luaEnv.DoString("require('Main')");
}
//这个自定义加载器是自动执行的,require传过来的是文件名Main
private byte[] MyCustomLoader(ref string filepath)
{
//拼接路径,从require传过来的lua文件名
string path = Application.dataPath + "/Lua/" + filepath+".lua";
Debug.Log(path);
//找到这个路径的lua文件读成字节数组返回来
if (File.Exists(path))
{
return File.ReadAllBytes(path);
}
else
{
Debug.Log("MyCustomLoader加载器加载lua文件失败");
return null;
}
}
}
版权声明:本文为qq_42385019原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。