titre : compétences de débogage lua
catégories :
balises Lua : [lua, débogage, compétences]
date : 14/07/2022 16:31:27
commentaires : faux
mathjax : vrai
toc : vrai
conseils de débogage lua
Préquelle
Compétences de débogage de scripts de jeu lua, pour obtenir une exécution en temps réel après la modification de scripts logiques et améliorer l'efficacité du développement
Mode éditeur côté PC
-
Créer un nouveau script de code de test
gDebugCustom = gDebugCustom or { } function gDebugCustom.Test01() gLog("--- Test01") end
-
L'éditeur ajoute l'analyse à ce script et affiche le bouton
-
Cliquez sur le bouton pour exécuter la méthode correspondante
-
net
GameMgr.CallLuaFunction("Debug_ExecCustomLua", luaFile, funcName);
-
lua
-- 动态执行 自定义 lua 文件调试 function Debug_ExecCustomLua(luaFile, funcName) local ok = xpcall(function() gAssert(Utils.IsFileExist(luaFile), "--- 找不到lua 文件, path: {0}", luaFile) dofile(luaFile) gAssert(gDebugCustom, "--- 找不到全局 table: gDebugCustom") gAssert(type(gDebugCustom[funcName]) == "function", "--- 找不到 gDebugCustom.{0} 方法", funcName) gDebugCustom[funcName]() end, __G__TRACKBACK__) if ok then gLog("<color=#00ff00ff>--- gDebugCustom.{0} success!</color>", funcName) else gLog("<color=yellow>--- gDebugCustom.{0} execute fail!</color>", funcName) end end
-
-
terminal mobile
télécharger lua
-
Ajouter une méthode globale au script de test [mode éditeur pc] (mode éditeur #pc)
gDebugWebFn
pour l'exécution WebgDebugCustom = gDebugCustom or { } function gDebugCustom.Test01() gLog("--- Test01") end -- 增加的全局方法 gDebugWebFn = function() gDebugCustom.Test01() end
-
Accédez au bouton de l'interface utilisateur de débogage du jeu pour exécuter un script de test de téléchargement, puis exécutez
gDebugWebFn
local function testDynamicLua() local url = "http://192.168.1.200:59090/lua/custom_unittest.lua" gTool.SafeDoString(url, function(isStop, msg) gLog("<color=#ffff00>--- gTool.SafeDoString, isStop: {0}</color>, msg: {1}", isStop, msg) gAssert(type(gDebugWebFn) == "function", "--- 找不到全局调试方法 gDebugWebFn") gDebugWebFn() end) end
Avancé
-
Exécutez dynamiquement des scripts et téléchargez à nouveau dynamiquement d'autres scripts logiques, ce qui réécrira la méthode lua pour obtenir une logique de script d'actualisation en temps réel
-- 避免出现在 unity editor中 gDebugCustom.requireExt = function(luaPath, callback) local luaDirUrl = "http://192.168.1.200:59090/require" local newPath = string.gsub(luaPath, "%.", "/") local relaPath = string.formatExt("{0}.lua", newPath) local fullUrl = string.formatExt("{0}/{1}", luaDirUrl, relaPath) -- gLog("--- fullUrl: {0}", fullUrl) local cbWrap = function(isOk, res) gAssert(isOk, "--- url require fail, luaPath: {0}, fullUrl: {1}", luaPath, fullUrl) gLog("<color=#00ff00>--- url require success</color>, luaPath: {0}, fullUrl: {1}", luaPath, fullUrl) if callback then callback(res) end end gBestHttpMgr:GetData(fullUrl, function(isSucc, data) if isSucc and not IsNull(data) then local text = Utils.BytesToUTF8(data) local ok, res = xpcall(loadstring(text), __G__TRACKBACK__) if not ok then cbWrap(false, "do remote string error") else -- 移动端非 ab 模式, 写入本地 if gLogicTool.IsMobile() and not Const.LuaBundleMode then local fullPath = gTool.PathJoin(Application.persistentDataPath, Const.kResluaDir, relaPath) Utils.WriteFileUTF8(fullPath, text) end cbWrap(true, res) end else cbWrap(false, "Network error") end end) end function gDebugCustom.Dynamic() local function testGm() gDebugCustom.requireExt("logic.common.gm", function() local input = "show me the log" local isOk = gGmMgr:Do(input) gLog("--- gm ok: {0}", isOk) end) end -- 测试 testGm() end
Copie côté Android lua
À la manière du texte brut lua, vous pouvez directement copier le script lua du projet dans le répertoire du corps du package avec la commande adb, puis redémarrer le jeu ou redémarrer la machine virtuelle lua
-
commande adb
$ adb push E:/its/rummy_itc-v4/z_tempSave/lua /sdcard/Android/data/com.aaa.bbb/files