lua 热部署简版
Why
我们在做lua开发的时候,一般的流程
- 写代码,Play Unity,到我们的功能,看看效果
- 发现又问题,修改代码
- 重新 Play,运行到我们的功能,看效果
- 循环2 - 3
有可改进的空间吗
lua支持热部署,不需要重启unity,重新打开该界面即可
关于热部署的核心技术点
1. 监听lua文件修改
写一个配置文件,标明哪些目录是被监听的,其他项目可以使用FileSystemWatcher,但是unity项目比较简单,AssetPostprocess即可
当文件有修改,获得修改的文件路径
2. 放弃现有lua环境中已经加载过的cache
根据得到的路径,得到lua路径,并且
package.loaded['{requirePath}']=nil
3. 重新require
require('{requirePath}')
PS 这里面包含的技术点
- 在Lua中使用require进行模块的加载,被成功加载的模块会将这个模块的引用保存到package.loaded表中;在使用require进行模块加载的时候,会首先在package.loaded表中查找,检测这个模块是否被加载过,如果被加载过则返回这个模块在package.loaded中保存的值,否则加载这个模块,所以,我们将package.loaded设置为nil,这样我们再require,就会从文件中重新加载了