Unity3D 调用模态对话框(MessageBox)

ABSTRACT

博客园文章(川北)。针对 Unity exe 发布到第三方平台后的调试难题,提出第四种手段:引入 System.Windows.Forms.dll 调 MessageBox,在异常时弹出模态对话框锁定进程现场。附 DLL 放置、Api Compatibility Level 设置与命名冲突的解决办法。

核心要点

  • PC 平台发布后的调试四手段对比:源码调试(需全套自家系统)、附加进程(非必现问题难抓)、日志(Unity 日志易混乱且崩溃时未必写完)、MessageBox(异常时弹窗阻塞进程,现场完整)。
  • 接入方法:System.Windows.Forms.dll 放入 Assets/Plugins 即自动引用;Player Settings 的 Api Compatibility Level 需改为 .NET 2.0(非 Subset)。
  • 命名冲突:using 后 Application 等类与 UnityEngine 冲突,用别名解决——using MsgBoxBase = System.Windows.Forms.MessageBox。
  • MessageBox.Show 一组重载:文本、标题、按钮(MessageBoxButtons)、图标(MessageBoxIcon)、默认按钮、所有者窗口,返回 DialogResult。
  • 典型用法:仅在异常分支调用 Show,程序挂起等待人工查看,不影响正常流程。

关键实体与概念

MessageBox、System.Windows.Forms.dll、Api Compatibility Level、命名空间别名、模态对话框、崩溃现场调试

关联概念

(无合适概念页,留空)

来源回溯

  • 原始文件:raw/gamedev/unity3d-调用模态对话框-unity3d-messagebox-川北-博客园.md(evernote/FW-游戏3研发技术 导入)

时效性评估

  • 仍有效:「异常时模态框锁定进程现场」的思路对 Windows PC 包排查偶发崩溃仍有价值。
  • 已过时:依赖 WinForms,仅限 Windows + Mono 运行时的老 Unity;IL2CPP 与现代 .NET 配置下不可用,跨平台项目应选崩溃上报 SDK(Bugly、Sentry)或系统级对话框 P/Invoke。