测试环境:windows10 vs2017 unity2019.4.0f1
以GameFramework框架为例说明,在GF框架中我将.dll的源码拖到了工程里,导致跳转位置是封装代码行而并非真正我想跳转到的打印处。
解决方法:将日志部分代码重新打包成dll即可,具体操作如下列。
Load lua script 'LuaConfig.lua' OK.
UnityEngine.Debug:Log(Object)
UnityGameFramework.Runtime.DefaultLogHelper:Log(GameFrameworkLogLevel, Object) (at Assets/ThirdResources/UnityGameFramework/Scripts/Runtime/Utility/DefaultLogHelper.cs:32)
GameFramework.GameFrameworkLog:Info(String, Object) (at Assets/ThirdResources/GameFramework/Base/Log/GameFrameworkLog.cs:171)
UnityGameFramework.Runtime.Log:Info(String, Object) (at Assets/ThirdResources/UnityGameFramework/Scripts/Runtime/Utility/Log.cs:143)
StarForce.ProcedurePreload:OnLoadLuaScriptSuccess(Object, GameEventArgs) (at Assets/GameMain/Scripts/Procedure/ProcedurePreload.cs:189)
GameFramework.EventPool`1:HandleEvent(Object, GameEventArgs) (at Assets/ThirdResources/GameFramework/Base/EventPool/EventPool.cs:264)
GameFramework.EventPool`1:Update(Single, Single) (at Assets/ThirdResources/GameFramework/Base/EventPool/EventPool.cs:75)
GameFramework.Event.EventManager:Update(Single, Single) (at Assets/ThirdResources/GameFramework/Event/EventManager.cs:68)
GameFramework.GameFrameworkEntry:Update(Single, Single) (at Assets/ThirdResources/GameFramework/Base/GameFrameworkEntry.cs:29)
UnityGameFramework.Runtime.BaseComponent:Update() (at Assets/ThirdResources/UnityGameFramework/Scripts/Runtime/Base/BaseComponent.cs:227)
上述日志,想跳转到的地方是ProcedureProload.cs:189行,而不是DefaultLogHelper.cs:32行。为此我们要将下面的内容封装成dll来使用。
创建一个类库工程,拷贝如下几个文件到工程里生成DLL拷贝至Unity Plugins文件夹下。
UnityGameFramework/Scripts/Runtime/Utility/DefaultLogHelper.cs
Assets/ThirdResources/GameFramework/Base/Log/GameFrameworkLog.cs
UnityGameFramework/Scripts/Runtime/Utility/Log.cs
以及它们所依赖的GameFrameworkLog.ILogHelper.cs 和 GameFrameworkLogLevel。
一共5个文件,会有报错,但很轻松就能解决,生成dll后导入Unity Plugins里之前,我们要做的是把这5个在Unity的源文件都删除掉,不然会冲突。之后去到BaseComponentInspector.cs代码增加一行内容,对logHelperTypeNames 列表对象,添加 typeof(DefaultLogHelper).FullName 成员,接着去到Hierarchy面板 搜索Builtin名称物体(或搜t:BaseComponent)找到它身上的Base组件 修改它的Log Helper选中为我们的Log Helper 即UnityGameFramework.Runtime.DefaultLogHelper 即可。
注意类库必须不低于3.5 Net Framework版本。
之后你会看到这样的日志就能正常直接跳转到我们想要跳转到的代码行了!
Load lua script 'Utility/Log.lua' OK.
UnityEngine.Debug:Log(Object)
UnityGameFramework.Runtime.DefaultLogHelper:Log(GameFrameworkLogLevel, Object)
GameFramework.GameFrameworkLog:Info(String, Object)
UnityGameFramework.Runtime.Log:Info(String, Object)
StarForce.ProcedurePreload:OnLoadLuaScriptSuccess(Object, GameEventArgs) (at Assets/GameMain/Scripts/Procedure/ProcedurePreload.cs:189)
GameFramework.EventPool`1:HandleEvent(Object, GameEventArgs) (at Assets/ThirdResources/GameFramework/Base/EventPool/EventPool.cs:264)
GameFramework.EventPool`1:Update(Single, Single) (at Assets/ThirdResources/GameFramework/Base/EventPool/EventPool.cs:75)
GameFramework.Event.EventManager:Update(Single, Single) (at Assets/ThirdResources/GameFramework/Event/EventManager.cs:68)
GameFramework.GameFrameworkEntry:Update(Single, Single) (at Assets/ThirdResources/GameFramework/Base/GameFrameworkEntry.cs:29)
UnityGameFramework.Runtime.BaseComponent:Update() (at Assets/ThirdResources/UnityGameFramework/Scripts/Runtime/Base/BaseComponent.cs:227)
好了就这样。。