Why
我们在做 lua 开发的时候,一般的流程
- 写代码,Play Unity,到我们的功能,看看效果
- 发现又问题,修改代码
- 重新 Play,运行到我们的功能,看效果
- 循环 2 - 3
有可改进的空间吗
lua 支持热部署,不需要重启 unity,重新打开该界面即可
关于热部署的核心技术点
1. 监听 lua 文件修改
写一个配置文件,标明哪些目录是被监听的,这部分使用 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,就会从文件中重新加载了
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于