vs code 正常编辑 unity c# 脚本需同时满足:unity 正确生成并更新 .csproj 文件、omnisharp 使用匹配的 .net sdk 启动、仅安装 c#、unity tools 和 shader 语言支持三个必要插件,并在项目根目录配置 omnisharp.json 指向 ./library/scriptassemblies。

VS Code 能正常编辑 Unity C# 脚本,前提是 Unity 生成了正确的项目文件、OmniSharp 能加载 Unity 的程序集、且插件不冲突——三者缺一不可。单独装插件或只改 Unity 设置,90% 的报红和跳转失效问题都不会解决。
Unity 必须生成并更新 .csproj 文件
VS Code 本身不理解 Unity 项目结构,全靠 .csproj 文件告诉 OmniSharp “哪些代码要编译”“引用了哪些 DLL”。如果没生成、生成失败、或内容过期,就会出现 UnityEngine 标红、MonoBehaviour 找不到、Ctrl+Click 完全无效。
- 在 Unity 编辑器中,点击
Assets → Open C# Project(不是双击脚本),强制触发完整工程重建 - 确认
Edit → Preferences → External Tools → External Script Editor已设为 VS Code,且勾选Generate all .csproj files - 如果仍异常:关掉 Unity 和 VS Code,删掉项目根目录下的
.sln、.csproj、.vscode/、obj/、bin/,再重启 Unity 并重执行Open C# Project
必须用匹配的 .NET SDK 启动 OmniSharp
Unity 不是随便用哪个 .NET SDK 都能解析的。它通过 Player Settings → Scripting Runtime Version 锁定了目标框架(比如 .NET 6.0 或 .NET Standard 2.1),而 OmniSharp 必须用**完全对应版本的 SDK** 启动,否则会报 The reference assemblies for framework ".NETFramework,Version=v4.7.1" were not found 这类错误。
- 先查 Unity 实际用的框架:打开
Edit → Project Settings → Player,记下Scripting Runtime Version和Api Compatibility Level - 按需安装:
.NET 4.x Equivalent→ 装.NET Framework Developer Pack 4.8;.NET Standard 2.1→ 装.NET SDK 6.0.300;.NET 6.0+→ 装对应 SDK,并运行dotnet --list-sdks确认已列出 - 在 VS Code 设置里显式指定路径:
"dotnetAcquisitionExtension.existingDotnetPath"填你本地dotnet.exe的绝对路径(如C:\Program Files\dotnet\dotnet.exe)
只装三个必要插件,其他全删
装一堆 C# 插件反而会让 OmniSharp 混淆上下文。Unity + VS Code 的最小可行组合只有三个,多一个都可能破坏 UnityEditor 类型识别或特性(如 [Header])补全。
- 必装:
C#(ID:ms-dotnettools.csharp),提供基础语法检查和调试支持 - 必装:
Unity Tools(ID:unity.unity-tools),官方维护,专解UnityEngine.UI、SerializedProperty等 Unity 特有类型 - 可选但推荐:
Shader languages support for VS Code(ID:tcwrens.shader-language-support),避免写 ShaderLab 时误报语法错误 - 立即卸载:
C# Extensions、Visual Studio Intellicode、C# FixFormat等非 Unity 官方插件,它们会干扰 OmniSharp 对 Unity API 的解析逻辑
项目根目录必须有 omnisharp.json 指向 ScriptAssemblies
默认 OmniSharp 只加载标准 .NET SDK,根本不知道 UnityEngine.dll 在哪。不手动配置,所有 Unity 类型都会标红,Debug.Log 点不进去,OnTriggerEnter 补全失效。
- 在项目**根目录**(不是
Assets子目录)新建omnisharp.json - 内容必须包含
"customPaths": [ "./Library/ScriptAssemblies" ],指向 Unity 自动生成的程序集目录 - 完整示例:
{
"roslynExtensionsOptions": {
"enableAnalyzersSupport": true
},
"script": {
"enableMsBuildLoadProjects": true
},
"msbuild": {
"useLegacySdkResolver": true,
"sdkResolution": {
"enabled": true,
"customPaths": [ "./Library/ScriptAssemblies" ]
}
}
}
这个文件的位置、路径写法、大小写,任何一个出错都会让 OmniSharp 忽略整个配置。别手抖漏掉点号或斜杠。











