Unity3D :在 Unity 中调试 C# 代码

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
在 Unity 中调试 C# 代码
可以使用调试器在应用程序运行时检查源代码。Unity 支持以下代码编辑器来调试 C# 代码:
- Visual Studio(包含 Visual Studio Tools for Unity 插件)
- Visual Studio for Mac
- 捷脑骑士
- Visual Studio Code(实验性)
尽管这些代码编辑器支持的调试功能略有不同,但它们都提供基本功能,如断点、单步执行和变量检查。您可以将这些代码编辑器附加到 Unity 编辑器或 Unity 播放器以调试代码。
Unity 中的托管代码调试适用于除 WebGL 之外的所有平台。它适用于 Mono 和 IL2CPP 脚本后端。
配置代码编辑器
Visual Studio (Windows)
Unity 编辑器安装程序包括一个选项,用于使用 Visual Studio Tools for Unity 插件安装 Visual Studio。这是设置 Visual Studio 以使用 Unity 进行调试的推荐方法。
如果您的计算机上已安装 Visual Studio,请打开它并转到“工具>获取工具和功能...”以查找并安装 Visual Studio Tools for Unity 插件。
Visual Studio for Mac
Unity Editor 安装程序包括一个选项,允许安装 Visual Studio for Mac。 建议通过这种方式设置 Visual Studio for Mac 以便在 Unity 中执行调试。
如果您的计算机上已安装 Visual Studio for Mac,请打开它并转到 Visual Studio > Extensions > Install from file...,找到并安装 Visual Studio Tools for Unity 插件。
捷脑骑士
您可以使用 JetBrains Rider 的默认安装来调试 Windows 或 Mac 上的 Unity 中的代码。 访问 JetBrains 网站进行安装。
视觉工作室代码
若要使用 Visual Studio Code 在 Unity 中进行调试,需要安装扩展。请参阅 Visual Studio Code 的文档,将 Visual Studio Code 配置为 Unity 项目的代码编辑器。按照特定于 Unity 调试器扩展的 Visual Studio Code 说明进行安装。Unity 对 Visual Studio Code 的支持是实验性的,因为 Unity 不正式支持 Debugger for Unity 扩展。
在 Unity 中指定外部脚本编辑器
安装代码编辑器后,打开 Unity,转到首选项>外部工具,然后将外部脚本编辑器设置为代码编辑器。

断点
断点允许您在代码中指定要暂停其执行的点。在外部代码编辑器中,可以在希望调试器停止的代码行上设置断点。当代码编辑器处于断点时,可以逐步查看变量的内容。
如果已将代码编辑器附加到 Unity 编辑器(请参阅将代码编辑器附加到 Unity 编辑器),则在代码编辑器中选择“继续”选项或停止调试模式之前,Unity 编辑器将变得无响应。
若要了解如何在 Visual Studio 中设置断点,请参阅在 Visual Studio 中设置断点。
在 Unity 编辑器中调试
当 Unity 编辑器处于运行模式时,可以在 Unity 编辑器中运行时调试 C# 代码。
若要在编辑器中进行调试,需要将编辑器的代码优化模式设置为“调试模式”,然后可以附加具有调试功能的代码编辑器。
若要更改代码优化模式,请选择 Unity 编辑器状态栏右下角的“调试”按钮。

Unity 的代码优化设置有两种模式:
- 调试模式,可用于附加外部调试器软件,但在编辑器中以运行模式运行项目时,C# 性能会降低。
- 发布模式,当您在编辑器中以运行模式运行项目时,该模式可提供更快的 C# 性能,但不能附加任何外部调试器。
单击状态栏中的“调试”按钮时,将打开一个小弹出窗口,其中包含可用于切换模式的按钮。该窗口还显示有关当前模式的信息,并描述切换模式时会发生什么情况。

要更改 Unity 编辑器的启动模式,请转到编辑 (macOS:Unity) >首选项>启动时常规>代码优化。

若要使用脚本控制这些设置,请使用以下 API:
- 托管调试器
- 编译.编译管道代码优化
- 编译.代码优化。
您还可以覆盖编辑器启动时的模式,或关闭调试器侦听套接字。 为此,当您启动编辑器时请使用以下命令行参数:
-releaseCodeOptimization
.在发布代码优化模式下启动编辑器。-debugCodeOptimization
.在调试代码优化模式下启动编辑器。-disableManagedDebugger
.在禁用调试器侦听套接字的情况下启动编辑器。
将代码编辑器附加到 Unity 编辑器
将代码编辑器附加到 Unity 编辑器的方式取决于您使用的代码编辑器,并且通常与代码编辑器的正常调试过程不同。某些代码编辑器允许您选择要调试的 Unity 实例。有关特定于代码编辑器的说明,请参阅代码编辑器外部文档。若要了解如何在 Visual Studio 中执行此操作,请参阅将 Visual Studio 附加到 Unity 编辑器。
将代码编辑器附加到 Unity 编辑器并准备好开始调试后,返回到 Unity 编辑器并进入运行模式。
在 Unity 播放器中调试
要编译 Unity 播放器以供调试,请执行以下操作:
- 转到“文件>生成设置”。
- 在生成播放器之前启用“开发生成”和“脚本调试”选项。还可以启用“等待托管调试器”选项,使播放机在播放机执行任何脚本代码之前等待附加调试器。
- 选择“生成并运行”。

将代码编辑器附加到 Unity 播放器
要将代码编辑器附加到 Unity 播放器,请在代码编辑器中选择播放器的 IP 地址(或计算机名称)和端口。有关在 Visual Studio 中的位置查找的示例,请参阅将 Visual Studio 附加到 Unity 编辑器。
注意:您的代码编辑器将显示可用于调试的所有 Unity 实例。请确保将代码编辑器附加到 Unity 播放器的正确实例,而不是附加到 Unity 编辑器(如果两者都正在运行)。
附加调试器后,可以正常开始调试。有关如何将 Unity 播放器附加到特定代码编辑器的说明,请参阅代码编辑器外部文档。有关如何将在移动设备上运行的 Unity Player 附加到 Visual Studio 的示例,请参阅使用 Visual Studio 调试 Android 和 iOS 设备。
在 Visual Studio 中设置断点
若要在 Visual Studio 中设置断点,请单击代码左侧要停止调试器的行上的列。行号旁边会出现一个红色圆圈,并突出显示该行。

将 Visual Studio 附加到 Unity 编辑器
若要将 Unity 编辑器附加到 Visual Studio 脚本,请打开 Visual Studio,转到“调试”>“附加 Unity 调试器”,然后选择要调试的 Unity 编辑器实例。
在以下示例图像中,有一个 Unity 实例在编辑器中运行,一个 Unity 实例作为 Android 播放器运行

使用 Visual Studio 调试 Android 和 iOS 设备
人造人
要调试在安卓设备上运行的 Unity Player,请使用 USB 或 TCP 连接到该设备。例如,若要连接到 Visual Studio 中的 Android 设备,请选择“调试”>“附加 Unity 调试器”选项。此时将显示运行播放器实例的设备列表。

在此示例中,Android 设备使用 USB 和 Wi-Fi 与运行 Unity 编辑器和 Visual Studio 的工作站在同一网络上连接。
Chrome OS 上的 Android
Unity 无法自动发现 Chrome 操作系统设备。要启动连接,请通过 Android 调试桥 (adb) 连接到设备。有关如何使用 adb 的更多信息,请参阅安卓工作室用户指南。
苹果
要调试在 iOS 设备上运行的 Unity 播放器,请使用 TCP 连接到该设备。例如,若要在 Visual Studio for Mac 中连接到 iOS 设备,请选择“调试”>“附加 Unity 调试器”。此时将显示运行播放器实例的设备列表。

确保设备只有一个活动网络接口(建议使用 Wi-Fi,关闭手机网络数据),并且 IDE 和设备之间没有防火墙阻止 TCP 端口(上图屏幕截图中的端口号 56000)。
重要提示:iOS 不支持通过 USB 进行调试。
调试器疑难解答
调试器的大多数问题都是因为代码编辑器无法找到 Unity 编辑器或 Unity 播放器。这意味着 Unity 编辑器或播放器无法正确附加调试器。由于调试器使用与编辑器或播放器的 TCP 连接,因此连接问题通常是由网络引起的。以下是解决基本连接问题的几个步骤。
确保将调试器连接到正确的 Unity 实例
您可以将代码编辑器附加到已启用调试的本地网络上的 Unity 编辑器或 Unity 播放器的任何实例。附加调试器时,请确保将其附加到正确的 Unity 实例。如果您知道运行 Unity 播放器的设备的 IP 地址或计算机名称,这有助于找到正确的实例。
验证与 Unity 实例的网络连接
代码编辑器使用与 Unity 性能分析器相同的机制来查找要调试的 Unity 实例。如果代码编辑器找不到所需的 Unity 实例,请尝试将 Unity 性能分析器附加到该实例。如果 Unity 性能分析器也找不到 Unity 实例,则运行代码编辑器或 Unity 实例的计算机上可能存在防火墙。如果防火墙已到位,请参阅检查防火墙设置。
确保设备只有一个活动网络接口
许多设备具有多个网络接口。例如,移动电话可能同时具有活动的蜂窝连接和活动的 Wi-Fi 连接。要使用 TCP 将调试器正确连接到 Unity 实例,IDE 需要与设备上的正确接口建立网络连接。例如,如果您计划通过 Wi-Fi 进行调试,请确保将设备置于飞行模式以禁用所有其他接口,然后启用 Wi-Fi。
您可以通过查看播放器日志来确定 Unity 播放器告诉 IDE 使用的 IP 地址。查找日志的一部分,如下所示:
Multi-casting "[IP] 10.0.1.152 [Port] 55000 [Flags] 3 [Guid] 2575380029 [EditorId] 4264788666 [Version] 1048832 [Id] iPhonePlayer(Example-iPhone):56000 [Debug] 1 [PackageName] iPhonePlayer" to [225.0.0.222:54997]...
此消息表明 IDE 将尝试使用 IP 地址 10.0.1.152 和端口 56000 来连接到设备。 运行 IDE 的计算机必须能访问此 IP 地址和端口。
检查防火墙设置
Unity 实例使用 TCP 连接与代码编辑器通信。在大多数 Unity 平台上,此 TCP 连接发生在任意选择的端口上。通常,您不需要知道此端口,因为代码编辑器应该会自动检测到它。如果这不起作用,请使用网络分析工具来确定在运行代码编辑器的计算机或运行 Unity 实例的计算机或设备上可能会阻止哪些端口。找到端口后,请确保防火墙允许访问运行代码编辑器的计算机和运行 Unity 实例的计算机上的端口。
验证托管调试信息是否可用
如果调试器附加到 Unity 实例,但断点未加载,则调试器可能无法找到代码的托管调试信息。托管代码调试信息存储在名为 .pdb 的文件中,位于磁盘上的托管程序集(.dll 文件)旁边。
启用正确的首选项和构建选项(请参阅配置代码编辑器)时,Unity 会自动生成此调试信息。但是,Unity 无法为项目中的托管插件生成调试信息。仅当关联的.pdb文件位于磁盘上 Unity 项目中的托管插件旁边时,才能调试托管插件中的代码。
防止设备锁定
禁用用于调试应用程序的设备上的任何屏幕锁定。屏幕锁定会导致调试器断开连接,并阻止其重新连接。在托管代码调试期间不要锁定屏幕。如果屏幕锁定,请在设备上重新启动应用程序,以便调试器可以再次连接。
代码编辑器外部文档
- Visual Studio - Using Visual Studio Tools for Unity (Windows)
- Visual Studio for Mac - Using Visual Studio Tools for Unity (macOS)
- Jetbrains Rider - 调试 Unity 应用程序
由3D建模学习工作室整理翻译,转载请注明出处!