VelvetSharp:轻量级 Unity C# 代码编辑器
I made some light weight unity C# code editor
VelvetSharp 是一款轻量级 Unity C# IDE,作为 Rider、Visual Studio 和 VS Code 的替代方案,当前版本为 Phase 8(build 8.0.0)。
一款轻量、快速启动的 Unity C# IDE——Rider、Visual Studio 和 VS Code 的替代方案。
当前版本:Phase 8(build 8.0.0)——见
VERSIONS.md。版本 体系基于阶段:每次交付更新都会将阶段加一, 编号从不重复。阶段始终显示在状态栏中。
零 .NET 运行时。零 OmniSharp。整个 C# 智能引擎均以
TypeScript 自定义构建,在 Web Worker 中脱离 UI 线程运行,基于 tree-sitter(WASM)以及
由我们自己的 ECMA-335
元数据读取器直接从 UnityEngine.dll 提取的 Unity API 数据库。
┌─────────────────────────────────────────────────────────────────┐
│ ◆ VelvetSharp — lightweight Unity C# IDE │
├───────────┬─────────────────────────────────────────────────────┤
│ Explorer │ tabs · Monaco editor · velvet theme │
│ Search │ IntelliSense backed by @velvetsharp/brain │
│ Outline │ • member completions w/ type inference │
| | • Unity event functions (Awake/Start/Update…) |
│ Ctrl+P │ • semantic colors: types/methods/fields/msgs │
│ Ctrl+T │ • Unity hover docs (from UnityEngine.xml) │
│ Ctrl+⇧+P │ • signature help · go-to-definition │
│ Ctrl+⇧+F │ • fast syntax squiggles (worker, ~90ms) │
| | • csproj auto-detect → assemblies + defines |
├───────────┴─────────────────────────────────────────────────────┤
│ ● brain online · 7 files · 8 types · 55 members · 2ms │
│ ● Unity API: UnityEngine v4.0.30319 · 3,288 types │
│ ⚙ 3 assemblies · +145 defines (from your .csproj files) │
└─────────────────────────────────────────────────────────────────┘
v0.3.0 新特性——预构建 Windows exe
- 现成的 Windows 构建,无需工具链——
VelvetSharp.exe以 便携文件夹(VelvetSharp.exe+resources.neu,压缩后约 5.9 MB)以及 NSIS 安装向导(VelvetSharp-0.3.0-win-x64-setup.exe,按用户安装,无需 管理员权限,含开始菜单 + 桌面快捷方式、卸载程序)的形式发布。 - 打包的 shell 是 Neutralino 6(WebView2)——与 Tauri 构建使用相同的渲染引擎——因此应用行为完全一致;这个 2.5 MB 的 exe 带有 VelvetSharp 图标和版本元数据。
- 首次运行工作区选择器——从任意快捷方式启动并选择你的 Unity
项目文件夹;该选择会被记住(状态栏标签或
Ctrl+Shift+P → File: Open Workspace Folder...可切换)。 desktop/包含完整的打包项目(neutralino.config.json+neu build),而src-tauri/仍可用于 Rust 构建的变体。
v0.2.0 新特性
- 一切都在 Web Worker 中运行——解析、索引、补全、悬停和 诊断从不阻塞 UI 线程。输入延迟降至 90 ms 防抖 + 1–3 ms 解析;5.2 MB 的 Unity API 在启动时于 worker 内加载。
- 增量项目索引——编辑文件时只更新该文件的 索引符号(v0.1 每次按键都会重建整个索引)。
- 完整语法着色——自定义 C# Monarch 语法(字符串、逐字 & 插值字符串、字符、十六进制/二进制数字、特性、预处理器、 控制流关键字)外加语义 token 提供器,它按 真实解析结果为你的项目中的类、方法、字段、属性、枚举成员和静态成员着色——UnityEngine 类型为青色,你的类为青色,Unity 事件函数(Awake、Start、Update…)以粗体天鹅绒粉色突出显示。
- 自动补全中的 Unity 事件函数——在类成员级别,你现在可以获得 完整的 MonoBehaviour 消息目录(40 个事件,含文档、制表位和 现成函数体)。已声明的会被隐藏。也可通过 Ctrl+Shift+P → "Unity: Insert Method…" 使用。
- 大纲面板——侧边栏 ≣ 标签显示当前文件的类 → 成员, 带有 Unity 消息徽章;点击即可跳转。
- csproj 自动配置——放入任意 Unity 项目文件夹,
VelvetSharp 会找到你的
*.csproj文件(Assembly-CSharp、-Editor、.Player…), 解析 DefineConstants(UNITY_*)、引用和 Compile 列表,在状态栏中 显示程序集标签,并将每个脚本映射到其程序集。
为什么它如此轻量
| Rider / VS | VS Code + C# | VelvetSharp | |
|---|---|---|---|
| 运行时 | .NET + JVM | .NET + LSP | 无(webview 中的 WASM) |
| 冷启动 | 10–60 s | 3–10 s | < 2 s |
| 引擎 | Roslyn/OmniSharp | OmniSharp | 自定义 TS 大脑(约 40 KB gzip) |
| Unity API 来源 | packages | NuGet | 你自己的 DLL,本地解析 |
仓库布局
velvetsharp/
├── app/ # Vite + React + Monaco frontend
│ ├── public/api/unityengine.db.json ← generated from YOUR UnityEngine.dll
│ ├── public/demo/ ← demo Unity workspace for browser mode
│ ├── public/wasm/ ← tree-sitter runtime + C# grammar
│ └── src/ # UI, adapters (browser ⇄ Tauri ⇄ Neutralino), monaco setup
├── packages/
│ ├── brain/ # @velvetsharp/brain — the C# intelligence engine
│ └── metadata/ # @velvetsharp/metadata — zero-dep ECMA-335 reader
├── desktop/ # prebuilt-exe packaging (Neutralino shell, `neu build`)
├── src-tauri/ # Tauri 2 shell (minimal Rust: fs + workspace scan)
├── scripts/ # test + tooling scripts
├── BUILD-WINDOWS.md # ← how to build the desktop app on Windows
└── package.json
快速开始(浏览器预览,无需构建)
cd app npm install npx vite build npx vite preview --port 3000 # or any static server for app/dist
桌面构建(Windows / macOS / Linux)
免构建选项(推荐):下载预构建的 Windows 产物——
VelvetSharp-0.3.0-win-x64-setup.exe(安装程序)或
VelvetSharp-0.3.0-win-x64-portable.zip(便携版)。双击即可运行。
自行重新构建打包外壳(无需 Rust):
cd app && npm install && npm run build && cd .. # put a fresh build into desktop/app/dist, then: cd desktop npx neu update # fetch Neutralino binaries cp ../app/node_modules/@neutralinojs/lib/dist/neutralino.js . npx neu build --release # → dist/VelvetSharp/VelvetSharp-<plat>
或者编译 Rust/Tauri 变体——参见 BUILD-WINDOWS.md。简版:
npm install npm run tauri dev # live development npm run tauri build # ~12 MB installer
大脑如何工作
- 解析——每个
.cs文件都由 tree-sitter 的 C# 语法解析(编译为 WASM,在 webview 中运行)。错误在 <50 ms 内变为波浪线。 - 索引——命名空间、类型、方法、属性、字段、事件和局部变量 被提取到内存中的项目索引。
- 推断——当你输入
rb.时,引擎会遍历你的作用域:字段 → 局部变量 → 参数 →var x = new T()/GetComponent<T>()模式 → MonoBehaviour 类上的 Unity 自全局变量(transform、gameObject…)→ 通过 Unity DB 和你自己的类型进行链式成员解析。 - 补全——Unity API 成员来自一个紧凑数据库(3,288 个类型、
13,958 个方法、9,213 个属性、748 个枚举),该数据库由
@velvetsharp/metadata从你的UnityEngine.dll中提取——一个从零编写的 ECMA-335 读取器, 完全不需要 .NET 运行时——并与官方 XML 文档 (34,599 个文档片段)合并,因此悬停时会显示真正的 Unity 文档。
重新生成 Unity 数据库
对于不同的 Unity 版本,放入新的 UnityEngine.dll + .xml 并运行:
npx tsx packages/metadata/src/cli.ts extract UnityEngine.dll UnityEngine.xml app/public/api/unityengine.db.json
扩展大脑(路线图)
v0.2——worker 引擎、语义颜色、Unity 消息、大纲、csproj 自动配置✅ 已发布- v0.4——
BCL 元数据、补全作用域、命名空间补全、名称建议、深度语义诊断✅ 已发布 - v0.5——查找用法、重命名(局部)、Unity 事件向导、语义 lint 包
- v0.5——可选的浏览器内 Roslyn(WASM),在你需要时提供完整的语义准确性
VelvetSharp 是你的——扩展 packages/brain/src/engine.ts,让它更锋利。
v0.3.1——工作区打开修复
- 启动对话框已修复:只要扫描到的工作区没有项目,首次运行选择器现在就会打开(v0.3.0 将其限制为空扫描时,而安装目录中的 readme 使其失效)。
- 永不静默打开:如果原生文件夹对话框失败或打开在窗口后面,内置提示可让你粘贴项目路径(经过验证,带有最近项目标签)。所有入口点(首次运行、欢迎按钮、状态栏标签、命令面板命令)共享同一流程。
- 根目录解析顺序:
--project=/ 裸路径 CLI 参数 -> 已验证的已保存根目录 -> 带 Unity 特征的 CWD(Assets/ + ProjectSettings/)-> 普通 CWD -> 选择器。 - 就地工作区重新加载:切换项目不再重新加载页面(Neutralino 一次性提供其认证令牌,因此页面重新加载是致命的)。编辑器清除标签页/模型,并实时重新索引并显示进度。
- 快速扫描:每个文件夹一次 readDirectory(移除了逐文件 getStats;读取时强制执行 2 MB 文本上限)。
- 关键运行时修复:
@neutralinojs/libv6 导出命名空间(filesystem、os、...),而不是Neutralino对象——旧的命名导入在运行时是undefined,导致 v0.3.0 中每次原生调用都崩溃。
交付物:VelvetSharp-0.3.1-win-x64-setup.exe(每用户 NSIS 安装程序)和 VelvetSharp-0.3.1-win-x64-portable.zip。
v0.4.0——BCL 智能 + 深度语义分析
- .NET 基类库支持:
mscorlib+System+System.Core元数据 使用相同的纯 TypeScript ECMA-335 读取器提取(无需 .NET SDK)并合并 到大脑中——补全、悬停和签名现在覆盖Console、Math、String、List<T>、Dictionary<K,V>、StringBuilder、File、Thread、Linq 容器及其相关:Unity + BCL 中共 6,210 个类型 / 58k 个成员。 - 补全作用域:裸上下文建议会遵循文件的
using指令、所在命名空间链以及自动检测到的 csproj (包括 Unity 6<ImplicitUsings>= Roslyn 隐式集合)。没有using UnityEngine;的文件不再建议GameObject。 - 命名空间补全:输入
using System.Collections.G并选择Generic—— 对 Unity、BCL 和你的项目中的每个命名空间进行 分段感知匹配。 - 智能变量命名:在声明位置(
Rigidbody、GameObject、List<int>、int……)引擎会建议符合习惯的名称 ——rb、go、col、list、i—— 并带有缩写表以及 camelCase 回退。 - Deep semantic pass (new
velvetsharp.semanticdiagnostics, 90 ms debounce):- 未使用的变量 —— 置灰 + 警告(感知读/写)
- 不可达代码 ——
return/break/continue/throw之后的语句在 编辑器中置灰并给出警告 - 缺少返回值 / 在 void 中带值
return/ 在非 void 中缺少值 - 接口、抽象类和静态类上的
new(CS0144/CS0712) - 字面量和方法调用上的
ref/out(必须是可赋值变量) - [Obsolete] API —— 从每个 DLL 中提取自定义特性元数据;
过时的类型/成员会获得删除线装饰、带过时消息的警告,
以及补全文档中的注释(例如
Thread.Suspend)。
- 首次运行加固:取消文件夹对话框且没有可索引内容时, 现在会显示输入路径提示,而不是让你停留在空白的欢迎界面。
交付物:VelvetSharp-0.4.0-win-x64-setup.exe 和
VelvetSharp-0.4.0-win-x64-portable.zip(exe + resources.neu + readme)。
来源:Hacker News · github.com