English | 中文版
在 Unity 开发中,保持 Console 堆栈整洁是提高调试效率的关键。虽然 Unity 官方提供了 [HideInCallstack] 特性,但在实际生产环境中面临两个核心难题:
- Unity 原生 Bug:该特性对泛型方法完全失效。
- 第三方库不可控:无法在不重新编译的前提下,为第三方 DLL(如 ZLogger)的方法添加过滤特性。
本项目通过“底层 IL 补丁”修复 Bug,配合“反射工具类”实现对第三方库的非侵入式过滤。
在执行任何操作前,必须确保开启了 Console 的 Strip 选项,否则所有的过滤逻辑都不会生效:
- 打开 Console 窗口。
- 点击右上角 三个点菜单 (⋮)。
- 勾选 Strip Logging Callstack。
Unity 内部在处理参数时错误使用了 Split(','),导致泛型参数中的逗号破坏了方法签名校验。只有完成此修复,后续的工具才能支持泛型过滤。
修改前请务必备份 UnityEditor.CoreModule.dll 文件:
- Windows:
<Unity安装目录>/Editor/Data/Managed/UnityEngine/UnityEditor.CoreModule.dll - macOS:
/Applications/Unity/Hub/Editor/<版本号>/Unity.app/Contents/Managed/UnityEngine/UnityEditor.CoreModule.dll
- 反编译:使用 dnSpy 以管理员身份打开该 DLL。
- 定位目标:找到
UnityEditor.ConsoleWindow->GetCallstackFormattedSignatureFromGenericMethod。 - 执行 IL 操作:
- 保存替换:保存 Module 并替换原 DLL,重启 Unity。
在修复了底层的泛型识别 Bug 后,可以通过脚本在不修改任何第三方代码的情况下,动态将过滤规则注入 Unity。
- 安装:将
CallstackFilterTool.cs放入项目中。 - 配置:打开
Edit -> Preferences -> Callstack Filter。 - 添加规则:输入完整命名空间类名(如
ZLogger.Unity.ZLoggerUnityLoggerProvider)。 - 持久化:规则自动保存至
ProjectSettings/CallstackFilters.json。
- 环境依赖:工具的泛型过滤功能必须基于 DLL 修改方案才能生效。
- 版本更新:升级 Unity 版本后,需要重新执行步骤 3 的 DLL 修改。

