为人所知的是lua自带的require函数加载脚本只会加载一次(就像unity里面的资源管理和AB包管理),而主播调试习惯是用Odin插件的Button在unity编辑器模式里调试而非进入播放模式后调试,今天主播在做热更新相关的时候企图多次调用脚本打印以调试功能,而有时候有些模块需要反复加载,因而主播随便写了个模块管理器。不到好不好用,主要是其一键卸载所有模块好用。
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]endlocal ok, result = pcall(require, name)if not ok thenerror("加载模块失败: " .. tostring(result))endTDKTookit.FileDic[name] = resultreturn result
end
--卸载模块
function unloadModule(name)TDKTookit.FileDic[name] = nilpackage.loaded[name] = nil
end
--重载模块
function reloadModule(name)TDKTookit.unloadModule(name)return TDKTookit.loadModule(name)
end
--列出模块
function listModules(boolPrint)if(boolPrint) thenprint("当前已加载的自定义模块:")for k, v in pairs(TDKTookit.FileDic) doprint(" - " .. k)endendreturn TDKTookit.FileDic
end--卸载所有模块
function unloadAllModule()for k,v in pairs(TDKTookit.FileDic) doTDKTookit.unloadModule(k)end
end