using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
public class Lesson_LuaEnv : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
//Lua解析器 能够在Unity中使用lua
//一般情况下保持它的唯一性
LuaEnv luaEnv = new LuaEnv();
luaEnv.DoString("print('你好世界')");
//执行一个lua脚本,使用require执行lua脚本
//默认寻找Resources文件夹下的lua脚本,且无法直接识别lua文件,因此需要在lua文件后加一个.txt后缀
luaEnv.DoString("require('Lesson1')");
//清除lua中没有被手动释放的对象(垃圾回收)
//帧更新中定时执行 或 切换场景时执行
luaEnv.Tick();
//销毁lua解析器
luaEnv.Dispose();
}
}
require(‘Lesson1’)会默认加载Assets/Resources文件下的lua脚本。
由于加载时无法识别.lua文件,需要在.lua后再加一个.txt后缀,即“Lesson1.lua.txt”

Lua文件加载重定向
使用require加载lua文件时,先会去自定义路径委托的方法里查找,最后才是去Resources文件夹。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
using System.IO;
public class Lesson2_Loader : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
LuaEnv env = new LuaEnv();
//xlua提供的路径重定向方法
//允许我们在自定义加载lua文件的规则
//当我们执行lua语言 require时 相当于执行一个lua脚本
//他就会自动执行我们自定义传入的函数
env.AddLoader(MyCustomLoader);
env.DoString("require('Main')");
}
//自定义加载lua文件的规则
private byte[] MyCustomLoader(ref string filePath)
{
//传入的参数是 require执行的lua脚本文件名
string path = Application.dataPath + "/Lua/" + filePath + ".lua";
Debug.Log(path);
//判断文件是否存在
if (File.Exists(path))
{
return File.ReadAllBytes(path);
}
else
{
Debug.LogError("Lua文件不存在:" + path);
}
return null;
}
}
评论(0)
暂无评论