lua 热部署简版

  |   0 评论   |   0 浏览

Why

我们在做lua开发的时候,一般的流程

  1. 写代码,Play Unity,到我们的功能,看看效果
  2. 发现又问题,修改代码
  3. 重新 Play,运行到我们的功能,看效果
  4. 循环2 - 3

有可改进的空间吗

lua支持热部署,不需要重启unity,重新打开该界面即可

关于热部署的核心技术点

1. 监听lua文件修改

写一个配置文件,标明哪些目录是被监听的,其他项目可以使用FileSystemWatcher,但是unity项目比较简单,AssetPostprocess即可
当文件有修改,获得修改的文件路径

2. 放弃现有lua环境中已经加载过的cache

根据得到的路径,得到lua路径,并且

package.loaded['{requirePath}']=nil

3. 重新require

require('{requirePath}')

PS 这里面包含的技术点

  1. 在Lua中使用require进行模块的加载,被成功加载的模块会将这个模块的引用保存到package.loaded表中;在使用require进行模块加载的时候,会首先在package.loaded表中查找,检测这个模块是否被加载过,如果被加载过则返回这个模块在package.loaded中保存的值,否则加载这个模块,所以,我们将package.loaded设置为nil,这样我们再require,就会从文件中重新加载了

标题:lua 热部署简版
作者:kyochow
地址:https://kyochow.github.io/articles/2020/10/21/1603245912000.html