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(一)相关推荐

  1. Unity Xlua 之 Lua调用C#(三)

    Unity Xlua 之 Lua调用C#(三) 一.Lua使用C#委托和事件 public class Lesson7 {public UnityAction action;public event ...

  2. Unity3D 基于XLua框架实现Lua组件化开发方式(一)----基于C#调用Lua

    众所周知Unity的开发语言是C#,并不支持Lua语言,为了解决这一问题出现了诸如Xlua.ULua.ToLua等框架来让unity支持lua,由于为了应对众多游戏经常需要解决的热更新问题,出了两种主 ...

  3. Unity XLua 相关

    转自:https://www.cnblogs.com/coderJiebao/p/unity3d23.html 1. Helloworld 1 using UnityEngine;2 using XL ...

  4. Unity XLua 官方教程学习

    一.Lua 文件加载 1. 执行字符串 using UnityEngine; using XLua;public class ByString : MonoBehaviour {XLua.LuaEnv ...

  5. 菜鸟学习 - Unity中的热更新 - Lua和C#通信

    孙广东 2015-4-6 热更新我是个菜鸟,感谢网上的各位的奉献,这次又当一回搬运工. 准备: 1.了解Lua的语法 推荐书籍<Lua程序设计 第二版> 2.使用ULua插件进行通信 尽量 ...

  6. Unity中的热更新 - Lua和C#通信

    准备: 1.了解Lua的语法 推荐书籍<Lua程序设计 第二版> 2.使用ULua插件进行通信 尽量早上真机.因为Bug问题特别多. 大杂烩: 更新LUa其实也是更新资源. Lua被看作一 ...

  7. 初学者学习 - Unity中的热更新 - Lua和C#通信

    菜鸟学习 - Unity中的热更新 - Lua和C#通信 孙广东 2015-4-6 热更新我是个菜鸟,感谢网上的各位的奉献,这次又当一回搬运工. 准备: 1.了解Lua的语法 推荐书籍<Lua程 ...

  8. C#调用Lua 3、创建Lua解析器管理器

    首先为什么我们需要一个Lua解析器管理器? 因为每次创建一个新的C#调用lua类时,我们都需要创建一个lua解析器,步骤重复,且难以保证解析器唯一性.因此创建一个lua解析器管理类,来保证LuaEnv ...

  9. Unity Xlua之Hotfix热补丁 (一)

    Unity Xlua之Hotfix热补丁 (一) 一.第一个热补丁 想要打热补丁的类前需要加上[Hotfix]特性 第一次打热补丁需要加上宏HOTFIX_ENABLE 点击生成代码 点击注入热补丁 例 ...

最新文章

  1. Nginx允许跨域和禁止跨域操作
  2. 单例模式(Singleton)
  3. Keras vs tf.keras: 在TensorFlow 2.0中有什么区别?
  4. 【Linux系统编程】进程间通信--有名管道
  5. HDU多校10 - 6886 Tic-Tac-Toe-Nim(尼姆博奕)
  6. 《零基础看得懂的C++入门教程 》——(7)小数组玩起来
  7. MongoDB存储基础教程
  8. Hello Qt(在Linux下编写运行Qt程序)
  9. python网络爬虫系列(一)——urllib库(urlopen、urlretrieve、urlencode、parse-qs、urlparse和urlsplit、request.Request类)
  10. MySQL多线程并发调优
  11. 2018 Multi-University Training Contest 1
  12. Presto为什么快
  13. CodeForces - 468A 24 Game
  14. sidirect 连接西门子_INTOUCH DASSIDirect3.0 DASSIDirect3.0驱动是西门子PLC与Intouch连接通讯的必备驱动程序 - 下载 - 搜珍网...
  15. android listview表格分页显示,android实现listview分页的方法
  16. fms5序列号_火枫 FMS-105分体式炉头测评
  17. js实现页面打印及bugger
  18. python实现m3u8转mp4
  19. Vue:v-charts图表设置指标别名
  20. 计算机专业选修课怎么选比较好,你知道怎么选AP课程吗?附AP不同专业方向的选课建议...

热门文章

  1. Allegro PCB后处理和生产文件导出
  2. NeuralRecon拜读:单目视频实时连贯三维重建
  3. JTAG、SWD接口定义
  4. AutoHotkey制作自己的Launchy --- 我的运行窗口
  5. 短信验证的实现(基于云之讯短信验证SDK)
  6. js 方法的返回值 return 用法探究
  7. Dynatrace分布式跟踪之Alibaba Dubbo
  8. at 17:00 Shutdown -s -t 60 关闭计算机的一些命令
  9. 01 leading
  10. 北宋灭亡——这世上没有完美的制度