Tencent / InjectFix

InjectFix is a hot-fix solution library for Unity
Other
1.96k stars 418 forks source link

热更成功,Debug信息正常,但是 Text 赋值失败 #37

Closed Jihuihu closed 4 years ago

Jihuihu commented 4 years ago

首先很感激作者,能共享又一个优秀的FixBug手段,从XLua到InjectFix,辛苦了

我用InjectFix在自己建立的测试工程中测试:

1.HotFixTest.cs中 一个TestRun方法,只是UnityEngine.Debug.Log一个字符串,并返回这个字符串 2.LogicMgr.cs中 根据按钮点击 呼叫 TestRun方法并接受其返回的字符串,通过一个Text对象LogText来显示到屏幕上.并且Debug.Log字符串的内容; 3.LogicMgr.cs中还有一个按钮是会到Server上拉取对应的HotPatch并通过 PatchManager.Load加载;

测试的结果,Debug.Log中的信息的确热更成功了,但是 Text对的内容却没有更新,而且没有看到任何的错误信息

请作者大大,帮忙分析一下,如果需要我贴一下代码

Jihuihu commented 4 years ago

这里是HotFixTest.cs的 TestRun方法

[Patch]
        public string TestRun()
        {
            string old = "Old Run";
            Debug.Log("debug:"+ old);
            return old;
        }

这里是 LogicMgr.cs中下载并呼叫TestRun的代码

    private void RunFunction()
    {
        var msg = TestRunGo.TestRun();
        Log(msg);
        Debug.Log("RunFun End"+msg);
    }

这个是一个Log方法,只是把字符串显示到场景中

 public void Log(string msg)
    {
        MsgText.text = MsgText.text + msg + "\n-";
        UnityEngine.Debug.Log("Log End:"+msg);
    }

这里是 LogicMgr.cs中下载并LoadPatch的代码

   IEnumerator DownLoadAndLoadPatch(string patchStr)
    {
        UnityWebRequest www = UnityWebRequest.Get(patchStr);
        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError)
        {
            Log(www.error);
        }
        else
        {
            // Or retrieve results as binary data
            byte[] results = www.downloadHandler.data;

            Log("loading " + patchStr);
            var sw = Stopwatch.StartNew();
            PatchManager.Load(new MemoryStream(results));
            Log(string.Format("{0}, using {1} msg", patchStr, sw.ElapsedMilliseconds));
        }
    }
Jihuihu commented 4 years ago

这个问题突然又好了,我没有做别的,只是为了 贴出代码,把方法做了一次重命名 再次测试 竟然通过了