必须禁用旧版C#插件、安装匹配的.NET SDK、由Unity生成.csproj并重载项目,三者缺一不可;否则代码补全失效、断点连不上、跳转失败。

VSCode 能实现和 Unity 的完整协作,但代码补全失效、断点连不上,根本原因不是“没装对插件”,而是插件组合冲突 + .NET SDK 版本错配 + 项目文件未被正确加载——三者缺一不可。
必须禁用旧版 C# 插件,只用 C# Dev Kit
旧版 C#(ms-dotnettools.csharp)和新版 C# Dev Kit(ms-dotnettools.csdevkit)会抢夺语言服务器控制权,导致 OmniSharp server is not running 反复报错、GameObject 类型无提示、Ctrl+Click 跳转失败或跳到空文件。
- 在 VSCode 扩展面板中,卸载或禁用
C#(旧版),仅保留C# Dev Kit和Unity Tools - 重启 VSCode 后,状态栏右下角应显示类似
.NET SDK: 6.0.x或.NET SDK: 8.0.x(取决于 Unity 版本) - 若仍提示
Could not locate MSBuild instance,说明本地缺失匹配的 .NET SDK:Unity 2021.3+ 需.NET 6 SDK,Unity 2022.3+ 推荐.NET 8 SDK,必须从dotnet.microsoft.com/download下载安装对应版本(非运行时,是 SDK)
Unity 必须生成 .csproj 文件,且 VSCode 要加载它
VSCode 的 C# Dev Kit 不解析 Unity 项目结构,只读取 .csproj 和 .sln 中的引用信息。直接打开 Assets 文件夹或单个脚本,补全必然为空。
- 在 Unity 编辑器中,勾选
Edit → Preferences → External Tools → Generate .csproj files for Unity projects - 点击
Assets → Open C# Project—— 这是唯一可靠触发完整项目文件生成的操作,不要依赖自动保存或后台编译 - 生成后检查项目根目录是否出现
Assembly-CSharp.csproj和YourProjectName.sln;没有则说明 Unity 未成功导出 - 若 VSCode 未自动加载,按
Ctrl+Shift+P输入Developer: Reload Window强制重载
调试必须用 Attach 模式,且 launch.json 要由 Unity 触发生成
手动创建或修改 launch.json 极易出错;VSCode 的 Unity 调试配置需由 Unity 编辑器主动注入上下文,否则会提示 No Unity process found 或 Unable to attach。
- 关闭所有 VSCode 窗口
- 在 Unity 中双击任意 C# 脚本(确保外部编辑器已设为 VSCode),VSCode 将自动启动并生成正确的
.vscode/launch.json - 该配置默认为
Attach to Unity类型,processId为0,靠pipeTransport动态发现 Unity 进程 - 若已有旧的
launch.json,建议先删掉再重新双击脚本,避免残留配置干扰 - 启动调试前,Unity 编辑器右上角应显示
Debugger Attached提示,否则断点不会命中
Unity Tools 不是可选项,它影响 Editor 类型识别和日志集成
Unity Tools 扩展提供 SerializedProperty、EditorWindow、ShaderLab 等 Unity 特有类型支持,并把 Unity Console 日志实时推送到 VSCode 的 OUTPUT 面板。不启用它,Editor 脚本几乎无补全,且无法查看运行时日志。
- 安装
Unity Tools后,在 VSCode 设置中启用unity.logIntegration.enabled - 检查 VSCode 底部状态栏是否出现
Unity: Connected,否则可能因项目路径含中文或空格导致初始化失败 - 若
Debug.Log不出现在 OUTPUT →Unity面板,请确认 Unity 编辑器中Console窗口本身有输出,且未过滤掉Log级别
最容易被忽略的是:Unity 生成 .csproj 的时机与 VSCode 加载项目的时机不同步。哪怕所有配置都对,只要你在 Unity 导入新资源或修改 asmdef 后没再执行一次 Open C# Project,VSCode 就会继续用过期的项目模型,导致新添加的命名空间或脚本始终不被识别。











