我是靠谱客的博主 冷酷曲奇,最近开发中收集的这篇文章主要介绍Unity Xlua 之 C#调用Lua(一)Unity Xlua 之 C#调用Lua(一),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Unity Xlua 之 C#调用Lua(一)
一.Lua解析器(LuaEnv)
执行Lua代码,加载Lua文件执行
public class Lesson01_LuaEnv : MonoBehaviour
{
private LuaEnv _luaEnv;
private void Start()
{
_luaEnv = new LuaEnv();
_luaEnv.DoString("print('Unity!')");
_luaEnv.DoString("require('Main')");//默认从Resources文件夹下加载,且文件格式为xxx.lua.txt
_luaEnv.Tick();//类似C#清理没有引用的变量内存
_luaEnv.Dispose();//释放掉Lua虚拟机环境
}
}
二.文件加载重定向
XLua加载Lua脚本默认是从Resources文件夹下加载,由于Unity对文件的读取性质,不能对后缀名称为.lua的文件进行读取,所以需要使用xxx.lua.txt。但是这样不能进行热更新Lua代码,而且开发起来不方便,所以需要重定向Lua文件的加载路径。
public class Lesson02_Loader : MonoBehaviour
{
private LuaEnv _luaEnv;
private void Start()
{
_luaEnv = new LuaEnv();
_luaEnv.AddLoader(CustomLoader);//可以有多个Loader,依次加载,直到加载成功,否则执行默认的Loader进行加载
_luaEnv.DoString("require('Main')");
_luaEnv.Dispose();
}
private byte[] CustomLoader(ref string filePath)
{
var path = Application.dataPath + "/Lua/" + filePath + ".lua";
if (File.Exists(path))
{
return File.ReadAllBytes(path);
}
else
{
Debug.Log("文件:"+path+"不存在!!!");
}
return null;
}
}
三.Lua解析器管理器
在项目中多处地方需要使用LuaEnv,并且项目中的Lua文件是放在AB包中进行读取(AB包中只允许.txt的Lua文件),这时候就需要对其进行封装。
public class LuaMgr : BaseManager<LuaMgr>
{
private LuaEnv _luaEnv;
public LuaTable Global => _luaEnv.Global;
public void Init()
{
if(_luaEnv!=null)
return;
_luaEnv = new LuaEnv();
_luaEnv.AddLoader(CustomLoader);
_luaEnv.AddLoader(CustomABLoader);
}
private byte[] CustomLoader(ref string filePath)
{
var path = Application.dataPath + "/Lua/" + filePath + ".lua";
if (File.Exists(path))
{
return File.ReadAllBytes(path);
}
else
{
Debug.Log("文件:"+path+"不存在!!!");
}
return null;
}
private byte[] CustomABLoader(ref string filePath)
{
var lua = ABMgr.GetInstance().LoadRes<TextAsset>("lua",filePath+".lua");
return lua != null ? lua.bytes : null;
}
public void DoString(string str)
{
_luaEnv?.DoString(str);
}
public void LoadFile(string fileName)
{
DoString($"require('{fileName}')");
}
public void Tick()
{
_luaEnv?.Tick();
}
public void Dispose()
{
if(_luaEnv==null)
return;
_luaEnv.Dispose();
_luaEnv = null;
}
}
测试代码
public class Lesson03_LuaMgr : MonoBehaviour
{
private void Start()
{
LuaMgr.GetInstance().Init();
LuaMgr.GetInstance().LoadFile("Main");
}
}
最后
以上就是冷酷曲奇为你收集整理的Unity Xlua 之 C#调用Lua(一)Unity Xlua 之 C#调用Lua(一)的全部内容,希望文章能够帮你解决Unity Xlua 之 C#调用Lua(一)Unity Xlua 之 C#调用Lua(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复