为人所知的是lua自带的require函数加载脚本只会加载一次(就像unity里面的资源管理和AB包管理),而主播调试习惯是用Odin插件的Button在unity编辑器模式里调试而非进入播放模式后调试,今天主播在做热更新相关的时候企图多次调用脚本打印以调试功能,而有时候有些模块需要反复加载,因而主播随便写了个模块管理器。不到好不好用,主要是其一键卸载所有模块好用。
Lua
if TDKLuaTookit==nil then
TDKLuaTookit={}
end
TDKLuaTookit.TDKTookit={}
TDKLuaTookit.TDKTookit.__index=TDKLuaTookit.TDKTookit
TDKLuaTookit.TDKTookit.__newindex=TDKLuaTookit.TDKTookit
TDKTookit={}
setmetatable(TDKTookit,TDKLuaTookit.TDKTookit)
TDKTookit.FileDic={}
--本来想用usenamespace的,想想这玩意是能卸载的,还是叫模块比较合适哈
--加载模块
function loadModule(name)
if TDKTookit.FileDic[name] then
-- 已经加载过,直接返回缓存
return TDKTookit.FileDic[name]
end
local ok, result = pcall(require, name)
if not ok then
error("加载模块失败: " .. tostring(result))
end
TDKTookit.FileDic[name] = result
return result
end
--卸载模块
function unloadModule(name)
TDKTookit.FileDic[name] = nil
package.loaded[name] = nil
end
--重载模块
function reloadModule(name)
TDKTookit.unloadModule(name)
return TDKTookit.loadModule(name)
end
--列出模块
function listModules(boolPrint)
if(boolPrint) then
print("当前已加载的自定义模块:")
for k, v in pairs(TDKTookit.FileDic) do
print(" - " .. k)
end
end
return TDKTookit.FileDic
end
--卸载所有模块
function unloadAllModule()
for k,v in pairs(TDKTookit.FileDic) do
TDKTookit.unloadModule(k)
end
end