U3DFrameWorkDemo:三、脚本模块
代码参考
代码文件参考下述详解的类图,工程参考第零章工程说明
概述
在现代项目的开发中,通常会使用一些脚本语言来提升开发效率。现在使用最普遍的脚本语言是Lua,它可以大大方便我们开发业务模块,且可以在运行期快速编译,以及方便热更。在U3D中,lua作为脚本使用比较广泛,这里使用tolua方案。
关键
-
tolua方案与框架适配
- 文件加载
- 不单独管理Lua的AB包
- 加载路径管理
- 资源加载使用资源管理模块的接口
- LuaMgr接入到生命周期模块
- 文件加载
-
tolua和C#交互会耗费资源(C#的对象内存地址可能会动态偏移,tolua在C#对象时需要去用分配的id去查找对象),可以使用封装一些工具减少交互,例如UI设置一张图片直接传入C#对象、Image控件相对路径和资源路径让C#的工具方法实现功能比从C#对象中拿到子控件,再用子控件去设置图片的效率要好些。(lua与宿主语言的交互细节参考:跳转链接:lua5.4源码剖析:三. C++与Lua相互调用)
实现
- LuaMgr:ToLua与框架的中介者
- LuaState:lua虚拟机,维护lua脚本运行环境
- Tolua:代理lua库函数调用
- LuaBinder:lua静态反射C#生成的代码,向lua虚拟机注册C#类
- LuaLoder:lua资源寻址、加载、解密
- LuaUtil:lua-C#调用效率优化的一些方法
- LuaLoop:lua更新、协程驱动,垃圾收集
大概的业务如图所示
备注
- lua资源更新可以不纳入版本管理,如:只是某个lua代码拼错了词,一行代码就修复提交了。为lua资源单独生成文件Md5上传CDN,更新资源检测时对比本地和CDN的lua文件MD5,直接下载更新文件。