vscode 不能直接运行 unity 脚本,仅支持编辑、分析与调试;需配置调试通道附加到 unity 编辑器进程,前提包括正确设置外部编辑器路径、勾选生成 .csproj 文件、从项目根目录打开、启用 unity debug mode、配置 omnisharp.json 指向 ./library/scriptassemblies,并确保 .net sdk 与 unity scripting runtime 版本兼容。

VSCode 本身不运行 Unity 脚本——它只编辑、分析、调试;真正编译和执行脚本的是 Unity 编辑器。所谓“VSCode 运行脚本”,实际是配置好调试通道后,让 VSCode 附加(attach)到正在播放的 Unity 编辑器进程,从而在断点处暂停、检查变量、单步执行。如果双击脚本没反应、Debug.Log 点不进去、断点灰掉,问题几乎都出在“关联”环节,而非“运行”逻辑。
Unity 里必须启用并指定 VSCode 路径
Unity 不会自动识别系统已安装的 VSCode,必须显式配置路径,否则双击脚本仍可能打开旧编辑器或报错。
- Windows 路径示例:
C:\Users\[用户名]\AppData\Local\Programs\Microsoft VS Code\Code.exe(不是Code.cmd) - macOS 路径示例:
/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code(注意是bin/code,不是 .app 包本身) - 务必勾选
Generate .csproj files for Unity projects—— 这是后续所有智能提示和调试的前提,不勾选则 VSCode 根本不知道项目结构 - 修改后点击
Regenerate project files,不要只点 OK 就退出
VSCode 必须加载正确的 .sln 上下文
VSCode 不是从 Assets 文件夹启动,而是从项目根目录(含 Assembly-CSharp.csproj 和 .sln 的那一层)打开。否则 OmniSharp 找不到 Unity 引用程序集,所有 UnityEngine 类型都会标红。
- 关闭 VSCode,用文件管理器导航到项目根目录(即包含
Packages、Assets、ProjectSettings的文件夹) - 在此目录下右键 → “Open with Code” 或终端执行
code . - 确认状态栏右下角显示
OmniSharp: Ready,而不是Starting...或报错 - 若长期卡在 “Loading project”:删掉项目根目录下的
.vscode/、obj/、bin/,再回 Unity 点一次Assets → Open C# Project
调试前必须开启 Unity Editor 的 Debug Mode
Unity 默认以 Release 模式运行脚本,禁用调试符号。不切到 Debug Mode,VSCode 的断点永远是空心的,无法命中。
- 在 Unity 编辑器右下角状态栏找到
Debug按钮(图标为虫子),点击切换为Debug Mode - 该设置仅影响 Editor 内运行(Play 模式),不影响构建后的包
- 确保
Edit → Preferences → External Tools → Editor Attaching已勾选(Unity 2020.3+ 默认开启) - VSCode 中按
Ctrl+Shift+P(Win)或Cmd+Shift+P(Mac),输入Debug: Select and Start Debugging,选Unity Editor配置项
omnisharp.json 是 Unity API 跳转失效的终极开关
即使插件装全、路径设对、.sln 生成成功,Debug.Log 仍点不进源码?大概率是 OmniSharp 没加载 UnityEngine.dll 和 UnityEditor.dll。这些程序集不在标准 .NET SDK 路径里,必须手动告诉 OmniSharp 去哪找。
- 在项目根目录创建
omnisharp.json,内容必须包含"customPaths": [ "./Library/ScriptAssemblies" ] -
./Library/ScriptAssemblies是 Unity 编译后存放所有引用 DLL 的位置,路径必须精确(注意是ScriptAssemblies,不是ScriptAssembly) - 如果使用 URP/HDRP,还需额外添加
"./Library/PackageCache"到customPaths,否则 Shader 相关类型会缺失 - 改完保存后,必须重启 VSCode 或执行命令面板中的
OmniSharp: Restart OmniSharp
最常被忽略的一点:Unity 的 Scripting Runtime Version(Player Settings → Other Settings)和本地 .NET SDK 版本要基本匹配。比如选了 .NET Standard 2.1,就别装 .NET 8 SDK——OmniSharp 可能因版本跨度太大而拒绝加载项目。不是越高越好,而是越贴近 Unity 实际使用的编译目标越稳。











