在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
热重载,就是不重新开unity让代码的变化直接看出来,一般在开发时候使用 lua中通过require导入的文件,最终都存在package.loaded这个table中。 for key,val in pairs(package.loaded) do print(key) if(key == "xxx") then package.loaded[key] = nil; require(key); end end 这种重新require会让这个脚本在内存中的数据丢失,谨慎使用 1. 将package.loaded[filename] = nil, 将模块置空. 2. 重新调用require,require(filename). 所以lua如果做了分层,数据和逻辑分离,只reload逻辑层,应该是可以的 注意的是,如果重新require的代码出错了,那么 package.loaded[filename] -- 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 |
请发表评论