lua 热部署简版

本贴最后更新于 1370 天前,其中的信息可能已经时移世异

Why

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

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

有可改进的空间吗

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

关于热部署的核心技术点

1. 监听 lua 文件修改

写一个配置文件,标明哪些目录是被监听的,这部分使用 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,就会从文件中重新加载了
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 225 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...