<p>Unity项目需将VSCode C#扩展设为Unity模式:启用omnisharp.useGlobalMono: "always"、omnisharp.assetsOnly,禁用C# Dev Kit;调试须手动配置launch.json附加Unity进程,且必须先在Unity中运行游戏。</p>

Unity 项目默认用 .NET Standard 2.1 或 .NET 6+(取决于 Unity 版本),但 VSCode 的 C# 扩展默认按完整 .NET SDK 行为加载,不兼容 Unity 的精简运行时——直接开 Unity 项目文件夹,大概率看到“找不到命名空间”“断点不命中”“OmniSharp 启动失败”。必须显式切换语言服务器模式并锁定目标框架。
Unity 项目里 dotnet 命令根本用不上
Unity 自带 Mono 或 IL2CPP 编译器,不依赖系统安装的 dotnet CLI;VSCode 里装 .NET SDK 不是为了编译 Unity 项目,而是为了让 C# 扩展(OmniSharp 或 C# Dev Kit)有可用的 Roslyn 分析引擎。装错版本或路径错位,只会让语言服务反复崩溃。
- 别在 Unity 项目根目录下执行
dotnet build——它会报错或生成无关输出 - Unity 的
Assets/下没有.csproj文件?那是正常的:Unity 自动生成临时项目文件(如Assembly-CSharp.csproj),放在Library/或Temp/下,且路径含空格或特殊字符,OmniSharp 默认不扫描 - 验证是否真需要
dotnet:打开 VSCode 内置终端,运行which dotnet。如果没输出,先别急着装 SDK——Unity 模式下,C# 扩展可退回到内置 Mono 模式(需手动启用)
C# 扩展必须设为 Unity 模式(不是默认 .NET Core 模式)
VSCode 的 ms-dotnettools.csharp 扩展默认走 OmniSharp 进程 + 全局 dotnet,而 Unity 项目需要的是“Mono + Unity API 元数据”支持。不切模式,IntelliSense 就认不出 UnityEngine、Debug.Log 等类型。
- 打开 VSCode 设置(
Cmd+,),搜索omnisharp.useGlobalMono,设为always(不是never) - 再搜索
omnisharp.assetsOnly,勾选它——这会让 OmniSharp 只解析项目引用,不尝试启动语言服务器,避免和 Unity 编译器冲突 - 确保
omnisharp.path是空值(不要填任何路径),否则插件会强行调用外部dotnet,导致加载失败 - 重启 VSCode 后,打开任意
.cs脚本,右下角状态栏应显示C# (Unity)或OmniSharp: Ready (Mono),而不是C# (LSP)
launch.json 不能自动生成,必须手动指向 Unity Editor 进程
Unity 不是普通 .NET 应用,F5 调试不是跑 .dll,而是附加到正在运行的 Unity 进程。VSCode 默认生成的 launch.json 配置完全无效,还可能触发“无法连接调试器”错误。
- 删掉自动生成的
.vscode/launch.json,新建一个,内容如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "Unity Editor",
"type": "coreclr",
"request": "attach",
"processName": "Unity",
"justMyCode": true
}
]
}-
processName值根据操作系统调整:Unity(macOS)、Unity.exe(Windows)、unity(Linux) - 调试前,必须先在 Unity Editor 中点击
Play运行游戏——否则 VSCode 找不到匹配进程 - 如果断点灰色不可用,检查 Unity 的
Edit → Preferences → External Tools → External Script Editor是否设为 VSCode,并勾选Generate .csproj files for \"Open C# Project\"
Unity 项目结构导致 OmniSharp 加载失败的典型现象
常见报错如 Could not resolve SDK、Failed to load project、namespace UnityEngine does not exist,90% 是因为 OmniSharp 错误地尝试解析 Unity 自动生成的临时项目,而非你写的脚本所在的真实上下文。
- 不要用 VSCode 直接打开
Assets/文件夹——必须打开 Unity 项目根目录(即含ProjectSettings/和Assets/的那个文件夹) - 确保
Assets/下至少有一个.cs文件被 Unity 成功编译过(看 Unity 控制台无报错),否则临时.csproj根本不会生成 - 如果仍加载失败,在命令面板(
Cmd+Shift+P)中运行OmniSharp: Select Project,手动选择Assembly-CSharp.csproj(路径通常为Library/ScriptAssemblies/Assembly-CSharp.dll对应的项目文件) - 禁用所有非必要扩展,尤其
Razor Language Services、C# Dev Kit(它强制启用 LSP,与 Unity 模式互斥)
Unity 和标准 .NET 开发共享工具链但语义完全不同:VSCode 不是编译器,只是前端;真正决定 API 可见性的是 Unity Editor 生成的元数据和目标框架声明。任何试图让 Unity “适配 .NET SDK”的操作,都是在对抗设计前提。



















