back
用 vscode 写 UE 代码
前提
目前来说 Rider 还是最好的 UE IDE,本文只是提供多一种选项来写 UE 代码。
环境
- vscode 插件 clangd
- clang
Windows 推荐使用 scoop 下载 clang。
scoop install llvm
部署
-
用 vscode 打开 UE 项目目录,新建
.vscode
目录。 -
新建
.vscode/settings.json
文件,写入下面内容。
{
"clangd.arguments": [
"--background-index",
"--compile-commands-dir=.vscode",
// completion
"--header-insertion=never",
"--completion-style=bundled",
"--function-arg-placeholders=false",
// effective
"--pch-storage=memory",
"-j=16",
// coding
"--clang-tidy",
// misc
"--log=error"
]
}
-
在项目目录新建
.clang-format
文件,谷歌一下 UE clang-format,随便找一个复制下来。这里用来格式化代码。 -
使用脚本生成反射信息和
compile_commands.json
compile_commands.json
成功生成后,打开 cpp 文件,clangd 就会自动运行。
UE 的 Unreal Build Tool 可以生成compile_commands.json
,需要 clang 辅助。不过 UBT 写的比较奇葩,在命令行直接clang -v
有结果,但 UBT 还是找不到,在论坛看了一遍 Linux/Windows 都是这样。
但 Windows 还是能找到 clang 的,不过需要把 LLVM 工具链放在这里。
C:/Program Files/LLVM
这里建议弄一个目录软链接,或者直接拷贝过来。不会用 mklink 可以看看这篇文章:比较 Windows 上四种不同的文件(夹)链接方式(NTFS 的硬链接、目录联接、符号链接,和大家熟知的快捷方式)
# C:/Program Files/
cmd /c mklink /J LLVM <LLVM_PATH>
然后这里需要一个脚本来调用 UBT,可以考虑用 vscode 内置的 tasks,也可也用 python 等脚本语言,假如要用 vsocde tasks:
- 新建文件
.vscode/tasks.json
假设 UE 目录在 C:/Program Files/Epic Games/UE_4.27
,新建项目名称为demo
。
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Gen Generated Code",
"group": "none",
"command": "Engine/Binaries/DotNET/UnrealBuildTool.exe",
"args": [
"demoEditor", // <project name>Editor
"Win64",
"DebugGame",
"-SkipBuild",
"-project=${workspaceFolder}/demo.uproject",
"-game",
"-engine"
],
"options": {
"cwd": "C:/Program Files/Epic Games/UE_4.27"
}
},
{
"type": "shell",
"label": "Subtask:GenClangDatabase",
"group": "none",
"command": "Engine/Binaries/DotNET/UnrealBuildTool.exe",
"args": [
"demoEditor", // <project name>Editor
"Win64",
"DebugGame",
"-SkipBuild",
"-project=${workspaceFolder}/demo.uproject",
"-game",
"-engine",
"-mode=GenerateClangDatabase"
],
"options": {
"cwd": "C:/Program Files/Epic Games/UE_4.27"
}
},
{
"type": "shell",
"label": "Subtask:MoveCompileCommands",
"group": "none",
"command": "move",
"args": [
"-Force",
"compile_commands.json",
"${workspaceFolder}/.vscode"
],
"options": {
"cwd": "C:/Program Files/Epic Games/UE_4.27"
}
},
{
"label": "Gen Compile Commands",
"group": "none",
"dependsOn": [
"Subtask:GenClangDatabase",
"Subtask:MoveCompileCommands"
],
"dependsOrder": "sequence"
}
]
}