vscode调试unity c#失败的主因是三环节脱节:unity未生成有效.csproj文件、vscode未识别为unity项目、unity编辑器未启用debug mode;须手动执行assets→open c# project、右下角切debug模式、确保状态栏显示c# (unity)。

VSCode 调试 Unity C# 代码连不上、断点不命中、Debug.Log 点不进去——90% 不是插件没装,而是三个环节断在了不同地方:Unity 没生成有效项目文件、VSCode 没识别成 Unity 项目、Unity 编辑器本身没开 Debug Mode。
Unity 必须手动触发 Open C# Project 生成 .csproj
双击脚本空白、类型全标红、UnityEngine 报错找不到,根本原因是 VSCode 根本没加载到任何项目定义。Unity 不会自动刷新 .csproj,也不会在你改完设置后悄悄生成。
- 在 Unity 编辑器中,必须点击
Assets → Open C# Project(不是双击脚本,也不是改完 External Tools 就完事) - 提前确认
Edit → Preferences → External Tools → Generate .csproj files for Unity projects已勾选,否则该操作会静默失败 - 生成成功后,项目根目录应出现
Assembly-CSharp.csproj和YourProjectName.sln;没有就说明失败 - 若仍异常,关掉 VSCode 和 Unity,删掉
.csproj、.sln、.vscode/、obj/、bin/,再重试
C# Dev Kit 必须运行在 Unity 模式下
VSCode 默认用 .NET SDK 启动语言服务,但 Unity 的 API 来自 Library/ScriptAssemblies/ 下的 DLL,和标准 .NET 完全无关。不切模式,Start() 方法都跳转不了。
- 安装
C# Dev Kit(微软官方)和Unity Tools(Unity 官方),重启 VSCode - 打开任意
.cs文件,右下角状态栏必须显示C# (Unity)或OmniSharp: Ready (Mono);若显示C# (LSP),说明仍在 .NET SDK 模式 -
omnisharp.useGlobalMono设为always(macOS/Linux)或填入 Mono 路径(Windows) - 清空
omnisharp.path字段——任何手动填写的路径都会强制走dotnet,导致加载失败
Unity 编辑器右下角必须切换为 Debug Mode
VSCode 断点连不上,大概率不是配置错,而是 Unity 编辑器拒绝被附加——它默认以 Release Mode 运行,关掉了调试符号输出。即使 launch.json 写对了也没用。
- Unity 编辑器右下角状态栏,点击虫子图标(
Debug按钮),切换到Debug Mode - 必须先点击 Unity 的
Play按钮运行一次(哪怕空场景),让编辑器进程处于可附加状态 - VSCode 中按
Ctrl+Shift+P(Win)或Cmd+Shift+P(Mac),输入Debug: Open launch.json,选择.NET Core,然后手动改成Attach to Unity配置 - 确保
launch.json中没有硬编码program或cwd,Unity 调试只需type: "vstuc"+request: "attach"+endPoint: "127.0.0.1:56000"
iOS 设备调试要额外做端口转发
在 iPhone 上调试 C# 脚本时,VSCode 无法直连设备,必须通过 iproxy 把设备端口映射到本机。漏掉这步,断点永远不触发。
- Unity 构建时务必勾选
Development Build和Script Debugging - 用 Xcode 或
ios-deploy将 App 安装到设备并运行 - 终端执行
iproxy 56000 56000(保持窗口常开),Unity Player 会在设备上监听56000端口,iproxy把它转到本机127.0.0.1:56000 -
launch.json中的endPoint必须与转发端口一致,不能写设备 IP 或其他端口
最容易被忽略的是:Unity 的 Debug Mode 切换是运行时状态,每次重启编辑器都会回到 Release Mode;而 VSCode 的 C# (Unity) 模式依赖项目文件存在且未被 OmniSharp 错误缓存——这两个状态必须同时成立,断点才可能命中。











