热重载,就是不重新开unity让代码的变化直接看出来,一般在开发时候使用

lua中通过require导入的文件,最终都存在package.loaded这个table中。
require会判断是否文件已经加载避免重复加载同一文件
所以需要先把package.loaded中对应的内容置空,然后再重新导入

for key,val in pairs(package.loaded) do
print(key)
if(key == "xxx") then
package.loaded[key] = nil;
require(key);
end
end

这种重新require会让这个脚本在内存中的数据丢失,谨慎使用

. 将package.loaded[filename] = nil, 将模块置空.

. 重新调用require,require(filename).

所以lua如果做了分层,数据和逻辑分离,只reload逻辑层,应该是可以的

注意的是,如果重新require的代码出错了,那么

package.loaded[filename] 
会一直为nil的,会影响后面的模块 解决办法是把之前的保存一份,如果出错用老的,并且提示
-- require_ex.lua
function require_ex(filename)
local old_content
if package.loaded[filename] then
-- 把旧的模块保存起来
old = package.loaded[filename]
-- 然后package.loaded[filename]赋空
package.loaded[filename] = nil
end -- xpcall下执行require
local ok,err = pcall(require, filename)
if not ok then
--热更失败,将旧值赋回去
print("hotfix fail, err msg ",err)
package.loaded[filename] = old_content
return false
end return true
end

参考文章:https://www.cnblogs.com/lewiskyo/p/6160059.html

之前又看一个框架也有这种功能,不过他是使用类似cookie机制实现:https://www.jianshu.com/p/eebd5cfce87f

lua热重载的更多相关文章

  1. KSFramework常见问题:Lua脚本热重载,内存状态数据丢失?

    Lua热重载 内存数据在重载后会丢失 KSFramework中,所有的UI Lua脚本是可以重载的.脚本中的一些内存数据,在重载后会丢失,比如: -- 记录一个UI界面被打开了多少次 function ...

  2. KSFramework:集成U3D热重载框架 - README

    KSFramework KEngine + SLua+ Framework = KSFramework KSFramework是一个整合KEngine.SLua的Unity 5开发框架,并为程序.美术 ...

  3. webpack使用webpack-dev-middleware进行热重载

    新手,刚开始学习webpack,想使用webdevserver,但定制性太差,于是研究了一下使用webpack-dev-middleware进行指定. 根据文档https://www.npmjs.co ...

  4. .Net 4.X 提前用上 .Net Core 的配置模式以及热重载配置

    1. 前言 在提倡微服务及 Serverless 越来越普及的当下,在 .Net Core 之前,.Net 应用的配置模式往往依赖于一个名为 web.config 的 XML 文件,耦合性高,而可扩展 ...

  5. Node.js + gulp 合并静态页模版,文件更新自动热重载。浏览器可预览

    github地址:https://github.com/Liaozhenting/template 使用的是ejs的语法.其实你用什么文件后缀都可以,都是按ejs来解析. 模板文件放在componen ...

  6. Lua热更新时正确设置文件名

    Lua热更新时正确设置文件名(金庆的专栏 2016.12)Lua热更新模块见:https://github.com/jinq0123/hotfix其中使用 load(chunk) 来加载更新后的内容, ...

  7. Lua热更新(hotfix)

    Lua热更新(hotfix)(金庆的专栏)hotfixLua 5.2/5.3 hotfix. Hot update functions and keep old data.https://github ...

  8. webpack之带有可自动打开浏览器及热重载的基本配置

    什么是Webpack WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并 ...

  9. lua热更框架之XLua

    框架介绍 xLua是当下最流行的unity热更方案之一,作者是腾讯的车雄生前辈,自2016年初推出以来,已经在腾讯的多款游戏项目上应用,目前xLua已经开源到了GitHub.xLua最大的特色是不仅支 ...

随机推荐

  1. 安装pygame for Python3.5

    首先进入pygame官网下载页面:http://www.pygame.org/download.shtml  页面上提供的有py2.4-py2.7,py3.1-py3.2的版本(py2.4就是对应py ...

  2. Verilog MIPS32 CPU(二)-- Regfiles

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  3. C# 二维码生成——QRCode

    C#二维码生成,这里使用开源的ThoughtWorks.QRCode.dll库. 步骤: 1.下载ThoughtWorks.QRCode.dll库文件,并引用到项目中. 2.创建QRCodeHandl ...

  4. php获取数组的键值

    <?php header ( "Content-type: text/html; charset=utf-8" ); $info[; $info[; $info[; $inf ...

  5. sql server不用安装sql管理工具开启sa

    今天无意间发现腾讯云镜像有windows server2016,追求新系统的我,马上就重装了云服务器.重装完后发现,配置太低,远程桌面都变得不是很顺畅,于是装完sql server2016后便不打算另 ...

  6. .net core i上 K8S(七).netcore程序的服务发现

    上一章我们分享了k8s的网络代理模式,今天我们来分享一下k8s中的服务发现. 1.环境变量模式的服务发现 k8s默认为我们提供了通过环境变量来实现服务发现的功能,前提是 1.需要service在pod ...

  7. 性能测试工具Locust的使用----TaskSet类~~task任务嵌套

    内容来自网络 http://blog.sina.com.cn/s/blog_a7ace3d80102w9r0.html TaskSet类 正如字面意思,TaskSet类定义了每个用户的任务集合,测试任 ...

  8. java 去最后一位字符 str.substring(0,str.length()-1)

    String str = " 中国, 美国 , 意大利 ";String[] arr = str.split(",");for(int i1 =0;i1< ...

  9. WebStorm 2017 激活方法

    https://www.cnblogs.com/woaic/p/6024975.html 注册时,在打开的License Activation窗口中选择“License server”,在输入框输入下 ...

  10. miniui中表单验证规则总结

    页面链接: http://www.miniui.com/demo/#src=form/rules.html 页面效果图: 页面代码: <!DOCTYPE html PUBLIC "-/ ...