在Unity编辑器环境热更Lua代码

 

local function reload_module()
local function Hotter(module_name)
local _,GlobalString = MatchCharacter(module_name) --截取Lua文件名
    local old_module = _G[GlobalString] --取出全局key,为你定义的Lua文件名。刚开始我传路径,一直报错
    _G[GlobalString]=false
    package.loaded[module_name] = nil
    require(module_name)


    local new_module = _G[GlobalString]
    for k, v in pairs(new_module) do
        old_module[k] = v
    end


    package.loaded[module_name] = old_module
end
    for k,v in pairs(package.loaded) do --Lua所有表都在该package.loaded内,是一个表结构
    if MatchCharacter(k) then
    Hotter(k)
    end
    end
end
Declare("reload_module", reload_module) --在外部调用该行代码


local HotCollection = {"SHGameBuildingUI"} --需要热更的Lua脚本名
local function MatchCharacter(str)
local x = false
local k, j=nil
for i=1,#HotCollection do
    k, j = string.find(str, HotCollection[i])
if k~=nil then
x = true
j=i
end
end


return x,HotCollection[j]
end
Declare("MatchCharacter", MatchCharacter)

 

你可能感兴趣的:(Unity学习笔记)