unity-实时调试某个lua类的方法

  • 一般情况下,修改lua后都要重新启动unity编辑器才有效。如果只是调试某几个方法时,修改后又要重启也是有点蛋疼
  • 辣么这时候以下方法就有效了。

前篇

这个是给QC做个rpc上行测试时,发现也可以这么玩。
原理很简单,就是使用lua的dofile加载并执行某个lua文件,在这个lua文件中,重写需要调试的方法。
***需要注意上下文的环境 ***


正确的姿势

卸载 lua, 然后再 require 进来

1
2
3
4
5
6
7
8
9
10
11
local function testPatch()
local pathLua = "logic.patch.patch"
package.loaded[pathLua] = nil

local function onPatchFunc(flag)
gLog("--- onPatchFunc, flag:{0}", flag)
end

local CPatch = require(pathLua)
CPatch:New(onPatchFunc)
end

比较挫的方法

  1. 重写前的 bubble_chat.lua

    1
    2
    3
    4
    5
    6
    7
    8
    9
    CBubbleChat = class()

    CBubbleChat.Init = function(self)
    self._test1 = "hello world"
    end

    CBubbleChat.SetFollowTarget = function(self)
    Logger.debug("--- <color=yellow>CBubbleChat</color>\n{0}", debug.traceback("SetFollowTarget", 2))
    end
    • 执行结果
      这里写图片描述
  2. 在待执行的lua文件 q6rpc.lua 中重写

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    local function send(upRpcName, args)

    end

    -- 此文件必须放在D盘根目录,切文件名为q6rpc.lua

    local CBubbleChat = Import("logic/ui/chat/bubble_chat").CBubbleChat

    CBubbleChat.SetFollowTarget = function(self)
    print("--- 我勒个去之"..self._test1)
    end

    -- local gUpRpcName = "rpc_server_add_friend"
    -- local gArgs = {111, 222}
    -- xpcall(send, __G__TRACKBACK__, gUpRpcName, gArgs)
  3. dofile一下这个文件

    1
    2
    3
    4
    CUIChatLogic.ExeFile = function(self)
    local path = "D:/q6rpc.lua"
    dofile(path)
    end
  4. 再次执行到这个方法的结果
    这里写图片描述