U3DFrameWorkDemo:三、脚本模块

发布时间 2023-05-29 09:44:52作者: 寡人正在Coding

代码参考

代码文件参考下述详解的类图,工程参考第零章工程说明

概述

在现代项目的开发中,通常会使用一些脚本语言来提升开发效率。现在使用最普遍的脚本语言是Lua,它可以大大方便我们开发业务模块,且可以在运行期快速编译,以及方便热更。在U3D中,lua作为脚本使用比较广泛,这里使用tolua方案。

关键

  • tolua方案与框架适配

    • 文件加载
      • 不单独管理Lua的AB包
      • 加载路径管理
      • 资源加载使用资源管理模块的接口
    • LuaMgr接入到生命周期模块
  • tolua和C#交互会耗费资源(C#的对象内存地址可能会动态偏移,tolua在C#对象时需要去用分配的id去查找对象),可以使用封装一些工具减少交互,例如UI设置一张图片直接传入C#对象、Image控件相对路径和资源路径让C#的工具方法实现功能比从C#对象中拿到子控件,再用子控件去设置图片的效率要好些。(lua与宿主语言的交互细节参考:跳转链接:lua5.4源码剖析:三. C++与Lua相互调用

实现

image

  • LuaMgr:ToLua与框架的中介者
  • LuaState:lua虚拟机,维护lua脚本运行环境
  • Tolua:代理lua库函数调用
  • LuaBinder:lua静态反射C#生成的代码,向lua虚拟机注册C#类
  • LuaLoder:lua资源寻址、加载、解密
  • LuaUtil:lua-C#调用效率优化的一些方法
  • LuaLoop:lua更新、协程驱动,垃圾收集

大概的业务如图所示
image

备注

  • lua资源更新可以不纳入版本管理,如:只是某个lua代码拼错了词,一行代码就修复提交了。为lua资源单独生成文件Md5上传CDN,更新资源检测时对比本地和CDN的lua文件MD5,直接下载更新文件。