1. UE5 项目在 Cursor 里为什么补全像“半瞎”
Unreal Engine 5 的 C++ 工程体量很大,一个中等项目动辄几千个翻译单元,头文件里还塞满了宏。Cursor 默认走的是它自带的语言服务,对 UE 的UCLASS、GENERATED_BODY、UPROPERTY这些反射宏基本没有语义理解,结果就是:GetHitReactMontage这种函数点进去跳不到定义,ACharacter的成员补全只给一半,红波浪线满屏但编译其实能过。这不是 Cursor 不行,而是它缺少一份“这个文件到底用什么参数编译”的清单。
clangd 是 LLVM 出的语言服务器,它做补全和跳转靠的是compile_commands.json——一份记录每个.cpp编译命令的数据库。UE 自带的 UnrealBuildTool 正好能生成这个文件。把 clangd 接进 Cursor,再喂给它 UE 生成的编译数据库,就能拿到接近 Rider / Visual Studio 的补全、转到定义、诊断体验。这套配置适合所有用 Cursor 写 UE5 C++ 的人,尤其是从 VS 或 Rider 迁过来、受不了“跳转失灵”的开发者。
我试过在 UE5.4 + Cursor 上从零配一遍,踩的坑主要集中在三处:clangd 找不到编译数据库、MSVC 头文件解析失败、新增反射类后索引不刷新。下面按可复制的顺序走一遍。
2. 前置准备:装 clangd、确认 Cursor 扩展、准备 TaoToken 通道
2.1 安装 clangd(不需要 VS 的 Clang 工具链)
clangd 单独装就行,不用动 Visual Studio 的组件。用 winget 一条命令:
winget install -e LLVM.LLVM装完验证,默认路径在C:\Program Files\LLVM\bin\clangd.exe:
& "C:\Program Files\LLVM\bin\clangd.exe" --version输出里能看到clangd version 18.x.x这类信息就对了。如果提示找不到命令,把C:\Program Files\LLVM\bin加进系统 PATH,或者后面在配置里直接写绝对路径。
2.2 Cursor 里装 clangd 扩展并关掉冲突的 IntelliSense
在 Cursor 扩展面板搜clangd,装官方那个(作者是 LLVM)。如果你之前装过微软的 C/C++ 扩展,一定要把它的 IntelliSense 关掉,否则两个语言服务抢同一批文件,补全会互相打架。在项目根建.vscode/settings.json:
{ "C_Cpp.intelliSenseEngine": "Disabled" }没有.vscode目录就手动建一个。这一步不做的话,后面 clangd 的跳转会被 C/C++ 扩展截胡。
2.3 TaoToken 统一 Key / API 通道
Cursor 里除了本地补全,还会用到模型能力做代码解释、重构建议。TaoToken 提供统一的 Key 和 API 通道,把模型调用收敛到一个入口,省得每个工具单独配。先去控制台拿 Key:
- 控制台入口:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
- API Keys 管理:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
API 基地址是https://taotoken.net/api(这个地址不加 UTM 参数)。拿到 Key 后先放着,第 3 节会把它写进 Cursor 的模型配置里。想先验证模型通不通,可以直接用模型对话页试一句:
- 模型对话:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite
3. 可复制配置:生成 compile_commands.json 并接进 Cursor
3.1 用 UE 自带脚本生成编译数据库
UE 的 UnrealBuildTool 有GenerateClangDatabase模式。把下面命令里的 UE 路径和项目路径换成你自己的。假设 UE 装在D:\Program Files\Unreal\UE_5.4,项目是D:\MyProjects\Aura\Aura.uproject:
& "D:\Program Files\Unreal\UE_5.4\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.exe" ` -Mode=GenerateClangDatabase ` -Project="D:\MyProjects\Aura\Aura.uproject" ` -Target="AuraEditor Win64 Development" ` -Target="Aura Win64 Development"注意-Target可以写多个,Editor 目标和 Game 目标都生成,这样编辑器模块和运行时模块的补全都覆盖。命令跑完,compile_commands.json会落在 UE 引擎根目录,也就是D:\Program Files\Unreal\UE_5.4\compile_commands.json。
3.2 让 clangd 读到这份数据库
有两种接法,选一种即可。
方案 A 最简单,直接复制到项目根:
copy /Y "D:\Program Files\Unreal\UE_5.4\compile_commands.json" "D:\MyProjects\Aura\compile_commands.json"方案 B 不复制,让 clangd 直接指向引擎目录。在.vscode/settings.json里写:
{ "clangd.path": "C:\\Program Files\\LLVM\\bin\\clangd.exe", "clangd.arguments": [ "--compile-commands-dir=D:\\Program Files\\Unreal\\UE_5.4" ] }我更推荐方案 C:做软链接,后续重新生成数据库时项目根自动生效,不用反复 copy。管理员 CMD 里执行:
del "D:\MyProjects\Aura\compile_commands.json" 2>nul mklink "D:\MyProjects\Aura\compile_commands.json" "D:\Program Files\Unreal\UE_5.4\compile_commands.json"3.3 给 clangd 加 MSVC 兼容参数
UE 在 Windows 上用 MSVC 编译,clangd 默认不认识cl.exe的路径,会报找不到标准库头文件。加上--query-driver让它去问 MSVC 要系统头路径:
{ "C_Cpp.intelliSenseEngine": "Disabled", "clangd.path": "C:\\Program Files\\LLVM\\bin\\clangd.exe", "clangd.arguments": [ "--query-driver=C:\\Program Files\\Microsoft Visual Studio\\**\\cl.exe", "--background-index", "--header-insertion=never", "--log=error" ] }--background-index让 clangd 后台建索引,大项目第一次打开会慢,但之后跳转快很多。--header-insertion=never关掉自动插头文件,避免它乱改 UE 的 include 顺序。--log=error减少日志噪音。
3.4 Cursor 模型通道接入 TaoToken
Cursor 的模型配置里,把 API Base 指向https://taotoken.net/api,Key 填第 2.3 步拿到的那个。这样代码解释、重构建议走统一通道。如果你要长期跑编码 Agent,可以看 Coding Plan:
- Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite
接入细节和参数说明在文档里:
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
4. 验证请求:补全、跳转、模型调用一次跑通
4.1 验证 clangd 补全与跳转
在 Cursor 里打开Aura.uproject所在目录,等右下角 clangd 状态从 indexing 变成 idle。打开一个角色类的.cpp,比如AuraCharacter.cpp,对GetHitReactMontage按 F12 或 Ctrl+点击,应该能跳到AuraCharacter.h里的声明。在函数体里敲Get,补全列表里应该出现GetActorLocation、GetCharacterMovement这些继承来的成员。
如果跳转还是失灵,先看 clangd 输出面板(Output → clangd),里面会打印它加载了哪个compile_commands.json。路径不对就是第 3.2 步没生效。
4.2 验证模型通道
在 Cursor 的 Chat 里问一句“解释一下这个 UPROPERTY 宏的作用”,如果走的是 TaoToken 通道,能正常返回。返回 401 就是 Key 没填对,返回 404 检查 Base 是不是写成了带路径的地址。想单独测模型,用模型对话页发一条消息最快:
- 模型对话:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite
4.3 新增文件后的刷新流程
这是最容易忘的一步。新建了带反射的类(用了UCLASS/UPROPERTY/UFUNCTION),*.generated.h需要 UHT 先生成,clangd 才能解析。先跑一次构建触发 UHT:
& "D:\Program Files\Unreal\UE_5.4\Engine\Build\BatchFiles\Build.bat" ` AuraEditor Win64 Development ` -Project="D:\MyProjects\Aura\Aura.uproject" ` -WaitMutex -NoHotReload然后重新生成编译数据库:
& "D:\Program Files\Unreal\UE_5.4\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.exe" ` -Mode=GenerateClangDatabase ` -Project="D:\MyProjects\Aura\Aura.uproject" ` -Target="AuraEditor Win64 Development" ` -Target="Aura Win64 Development"最后在 Cursor 命令面板执行Clangd: Restart language server,或者Clangd: Rebuild index。只新建普通 C++ 工具类(不含反射宏)的话,跳过构建,直接重新生成数据库再重启 clangd 就行。只编辑已有文件、没新增.cpp/.h,两者都不用做。
5. 本篇常见错排查
5.1 clangd 报 “Failed to find compile_commands.json”
clangd 从当前打开文件的目录往上找compile_commands.json。如果你用方案 B 的--compile-commands-dir,确认路径里没有多余引号,Windows 路径用双反斜杠。用方案 A 或 C 的话,确认项目根确实有这个文件,软链接的话用dir看是不是<SYMLINK>。
5.2 头文件全红,提示找不到string/vector
这是--query-driver没配对。确认 VS 安装路径匹配C:\Program Files\Microsoft Visual Studio\**\cl.exe,如果你的 VS 装在别的盘,把前缀改掉。改完重启 clangd。还有一种情况是compile_commands.json里记录的编译器路径是旧的,重新生成一次数据库。
5.3 补全和跳转时好时坏
多半是微软 C/C++ 扩展的 IntelliSense 没关干净。检查.vscode/settings.json里C_Cpp.intelliSenseEngine是不是Disabled,另外在 Cursor 设置里搜intellisense,把用户级的也关掉。两个语言服务同时跑,谁抢到算谁的,表现就是随机失灵。
5.4 新增反射类后跳转失效
*.generated.h还没生成。按 4.3 的顺序:先构建触发 UHT,再刷新数据库,再重启 clangd。顺序反了的话,数据库里没有新文件的编译参数,clangd 自然解析不了。
5.5 模型调用返回鉴权错误
检查 Key 有没有多余空格,Base 地址是不是https://taotoken.net/api。如果用的是 Coding Plan 的额度,确认套餐状态正常。接入文档里有完整的错误码对照:
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
6. 把配置固化下来,下次直接复用
整套流程跑通后,建议把三样东西固化:项目根的.vscode/settings.json(clangd 参数 + 关 IntelliSense)、项目根的compile_commands.json软链接、以及一个刷新脚本。刷新脚本把 4.3 的两条命令包进去,新增文件后双击就跑,省得每次翻命令历史。
如果你还在用别的编辑器或 Agent 工具,TaoToken 的 Key 和 API 通道是通用的,配一次到处能用。长期跑编码 Agent 的话,Coding Plan 的额度比按次调用划算:
- Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite
需要新 Key 或者管理已有 Key,去 API Keys 页面:
- API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
官网入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=