ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VS Code开发UE5项目全攻略:环境配置、编译与调试

VS Code开发UE5项目全攻略:环境配置、编译与调试 1. 为什么我选择用 VS Code 开发 UE5 项目说实在的每次在技术群里看到有人问“UE5 到底能不能用 VS Code 开发”我都想直接甩一句能而且用好了不比 Visual Studio 差。但这句话后面其实跟着一堆前置条件不搞清楚这些条件你装完 VS Code 打开 UE5 工程该编译编译不了该补全补全不出来体验会非常劝退。先说我的整体环境。平时主力开发机是 Windows 11UE 版本 5.3 和 5.4 两个分支来回切显卡是 RTX 4070内存 64GCPU 是 i7-13700K。这套环境下我日常的 C 编辑、编译、断点调试、日志排查完全在 VS Code 里完成Visual Studio 只作为 UE5 的构建工具链底座存在平时根本不打开它的界面。这里要先掰扯清楚一个概念VS Code 和 Visual Studio 是两回事。Visual Studio 是微软的完整 IDE自带 MSVC 编译器、调试器、项目管理器装完 UE 插件就能一条龙干活。VS Code 是个编辑器它本身不会编译 C编译和调试能力全部靠外部工具链和插件组合出来。所以你在 VS Code 里建 UE5 工程本质上是把“编辑器、编译器、调试器、构建脚本”四样东西拼在一起拼得好就是顺滑的开发体验拼不好就是各种玄学报错。这套方案解决的核心痛点有几个启动速度快、内存占用低、跨平台配置统一、对 Git 操作友好。我身边不少同事平时纯用 Visual Studio一旦切到笔记本或者远程 Linux 机器上就要重新适应环境VS Code 配合 Remote-SSH 基本能做到一套配置到处跑。另外UE5 的智能感知IntelliSense在 VS Code 里配置好之后跳转、补全、重构提示完全不输 Visual Studio唯一损失的是 Visual Studio 独有的 UE 类视图和一些可视化调试窗口这些在纯逻辑开发里其实用得不频繁。那什么人适合这套方案我觉得有三类一是用 UE5 做纯逻辑开发、不太需要蓝图可视化调试的 C 程序员二是需要远程开发或者经常在多台设备间切换的人三是对 Visual Studio 的启动速度和资源占用已经忍无可忍的人。反过来如果你主力是蓝图或者要重度依赖 Visual Studio 的 Live Code 和图形化调试面板那还是老老实实装 Visual Studio 全家桶。2. 动手前的准备工作缺一不可配置 VS Code 开发 UE5最怕的就是“差一个组件没装然后报错报得莫名其妙”。我在这里把整套依赖链按顺序列出来每一项都说明为什么需要、缺了会怎样。2.1 核心底座Visual Studio Build Tools刚才说过VS Code 本身不编译 CUE5 的源码构建依赖 MSVC 编译器和 Windows SDK。UE5 官方文档里写的是要安装 Visual Studio 2019 或 2022但你不需要打开 Visual Studio 的 IDE只需要装它的 Build Tools 组件。安装方式有两种。第一种是安装完整版 Visual Studio Community 2022然后用 Visual Studio Installer 勾选“使用 C 的游戏开发”工作负载这里面含着 MSVC 编译器、Windows SDK、.NET Framework 等一堆 UE 构建需要的东西。第二种是只装 Build Tools也就是在 Visual Studio Installer 里选“适用于 Visual Studio 的生成工具”一样能拿到编译器。我个人推荐直接装完整版 Community原因有两个第一UE 的构建脚本在某些边缘情况下会去检测 VS 的安装路径只装 Build Tools 有概率出现“找不到 VS 安装实例”的报错第二你留着完整版 IDE 作为备用万一 VS Code 方案出问题还能有个兜底。装的时候记得把“单个组件”里的 Windows 11 SDK 选上UE5 编译时缺 SDK 是高频报错。2.2 VS Code 本体和四个必装插件VS Code 本体去官网下载就行了需要注意区分 System Installer 和 User Installer。我建议用 User Installer它不需要管理员权限后续升级也省事不影响系统其他软件。装完 VS Code插件的选择是重点。网上有很多“UE5 必装插件清单”里面动不动列十几二十个真正常用的其实就这几个C/C 扩展这是微软官方的 C 语言服务提供智能感知、调试、代码补全不装它 VS Code 就是一个高级记事本。C/C Extension Pack它是把 C/C、CMake、CMake Tools 等打包在一起的一个合集装了省事。C# 扩展为什么需要它后面细说UE5 的 UnrealBuildTool 和自动化工具是 .NET 写的VS Code 要识别和调试这些工具链时需要 C# 支持。GitLens这个不是必需品但对看 Git 历史、协作开发很有用。另外我还会装一个 Material Icon Theme 来换图标纯粹为了美观不影响功能。有精力的话顺手把 Python 扩展也装一下因为 UE5 的编辑器自动化、数据表格处理脚本经常用到 Python。2.3 两个隐形依赖.NET SDK 和 Python这是很多人忽略的部分。UE5 的 UnrealBuildToolUBT是 .NET 6/8 应用你每次编译工程、生成项目文件时系统会调用 dotnet 来执行 UBT。如果机器上没装对应版本的 .NET SDK你会看到奇怪的错误常见的是 “The target framework does not exist” 或者点击编译按钮后完全没反应。UE 5.3 对应的是 .NET 6UE 5.4 和 5.5 开始转向 .NET 8。我的建议是直接在微软官网装最新的 .NET 8 SDK然后把 .NET 6 SDK 也一并装上双版本共存没有冲突。装完可以在终端里跑一句dotnet --list-sdks能看到已安装的 SDK 列表就说明环境没问题。Python 这边UE5 内置的编辑器脚本接口是 Python 绑定的但你在 VS Code 里写 Python 脚本时用的还是系统里的解释器。装 Python 3.9 到 3.11 都行装的时候记得勾选“Add Python to PATH”不然 VS Code 找不到解释器又要折腾半天。3. 正式配置流程一步步拆解前置环境齐了接下来是核心配置。我把整套流程分成四个阶段生成工程文件、配置 IntelliSense、配置编译任务、配置调试运行。每一步都给出具体操作和我踩过的坑。3.1 第一步生成 UE5 工程文件UE5 的 .uproject 文件本身不是 VS Code 能直接打开的工程文件你需要先让它生成出完整的中间文件和工程结构。最省事的方法是在 .uproject 文件上右键选择“Generate Visual Studio project files”。这一步会调用 UnrealBuildTool生成一个 .sln 解决方案文件和一堆中间目录。但这里有个关键点生成出来的 .sln 是给 Visual Studio 用的VS Code 打不开 .sln 也没关系我们真正需要的是 UBT 生成的那些中间文件它们会告诉 VS Code 当前工程用了哪些头文件目录、宏定义和模块依赖。如果你是用命令行方式打开终端切到工程目录执行 引擎路径/Engine/Build/BatchFiles/Build.bat -projectfiles -project工程路径/你的工程.uproject -game -rocket -progress。这条路对于后续自动化构建很有用我强烈建议你把这个命令记下来后面配置编译任务会用到。生成完成后在工程根目录下会出现 .sln 文件和 Intermediate 目录。VS Code 里直接用“文件 - 打开文件夹”打开你的工程根目录而不是打开 .sln。这一步新手很容易搞错打开方式不对会导致 IntelliSense 找不到任何头文件。3.2 第二步配置 IntelliSense 的 c_cpp_properties.json打开工程文件夹后VS Code 的 C/C 插件会问你选择哪种 IntelliSense 模式。这时候需要让 C/C 插件知道 UE5 的包含路径。有两种方式获取这些路径一是手动从工程里的 Intermediate/Build/Win64/ 下的 VCXProj 文件里翻二是我个人更推荐的直接在.vscode目录下手动创建 c_cpp_properties.json 文件把 UE 引擎的头文件路径、第三方库路径、宏定义都写进去。这里给一个我项目里实际在用的配置作为参考{ configurations: [ { name: UE5, includePath: [ ${workspaceFolder}/Source/**, ${workspaceFolder}/Plugins/**, E:/UE_5.3/Engine/Source/**, E:/UE_5.3/Engine/Plugins/**, E:/UE_5.3/Engine/Intermediate/Build/Win64/UnrealEditor/Inc/** ], defines: [ UE_EDITOR, WITH_EDITOR, UE_ENABLE_DEBUGGING, UE_BUILD_DEVELOPMENT1, WIN32, _WINDOWS ], compilerPath: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe, cStandard: c17, cppStandard: c20, intelliSenseMode: windows-msvc-x64, compileCommands: ${workspaceFolder}/compile_commands.json } ], version: 4 }注意compileCommands这一项如果你愿意多花一步生成 compile_commands.jsonVS Code 的智能感知会准确到每个文件的编译参数。生成方法是用 CMake 模式打开工程或者用第三方工具从 UBT 的中间文件导出。我用的方法是装一个叫cppcompilecommands的 Python 工具它会自动扫描工程的 VCXProj 文件并生成 compile_commands.json这个 json 文件生成一次只要不新增模块基本不用管。这里忍不住多说一句很多人照着网上的 c_cpp_properties.json 抄配置结果头文件还是满天飞。大概率是因为includePath里少了Engine/Intermediate/Build/Win64/UnrealEditor/Inc这个目录。UE5 的运行时头文件很多是在构建过程中动态生成到 Intermediate 目录里的你不加这个路径UObject 相关的编译期宏和生成头文件就找不到。3.3 第三步配置编译任务的 tasks.jsonIntelliSense 只是让编辑器看得懂代码真正要编译得配置任务系统。VS Code 的任务系统本质上是在终端里执行命令所以我要做的就是把 UE5 的构建命令包装成 task。在.vscode目录下创建 tasks.json我这里提供一个可直接用的配置{ version: 2.0.0, tasks: [ { label: BuildEditor(Debug), type: shell, command: E:/UE_5.3/Engine/Build/BatchFiles/Build.bat, args: [ MyProjectEditor, Win64, Debug, -projectE:/MyProjects/MyProject/MyProject.uproject, -waitmutex ], group: { kind: build, isDefault: true }, options: { cwd: E:/MyProjects/MyProject }, problemMatcher: [ $msCompile ] }, { label: BuildEditor(Development), type: shell, command: E:/UE_5.3/Engine/Build/BatchFiles/Build.bat, args: [ MyProjectEditor, Win64, Development, -projectE:/MyProjects/MyProject/MyProject.uproject, -waitmutex ], group: build, options: { cwd: E:/MyProjects/MyProject }, problemMatcher: [ $msCompile ] } ] }这里的Build.bat参数有讲究MyProjectEditor是目标名对应你的工程名加 Editor 后缀编译出来的目标是编辑器本身Win64是平台Debug和Development是配置类型。日常开发用 Development 就够了它编译快、优化级别适中。Debug 用于排查疑难杂症但编译速度慢得让人怀疑人生。关于-waitmutex参数这个是关键。UE5 的构建系统同一时刻只允许一个进程写中间文件不加这个参数你在 VS Code 里点构建的同时如果别的程序也在编译同一个工程文件锁冲突会让构建直接失败。配置好之后按CtrlShiftB就能触发编译VS Code 的终端会实时滚动编译日志代码里的错误会通过 problemMatcher 自动解析到“问题”面板双击就能跳到出错位置。这一步实现之后编译算是通了。3.4 第四步配置调试和快速启动编辑器的 launch.json编译能通过之后你要能在 VS Code 里启动 UE5 编辑器并附加调试器。这里有个很多人搞不清楚的节点UE5 的调试分两种一种是启动编辑器并附加调试器另一种是附加到正在运行的编辑器进程。第一种适用于你刚从源码启动编辑器、需要从入口开始调试的场景。在.vscode/launch.json里配置{ version: 0.2.0, configurations: [ { name: Launch UE5 Editor (Debug), type: cppvsdbg, request: launch, program: E:/UE_5.3/Engine/Binaries/Win64/UnrealEditor-Win64-Debug.exe, args: [ E:/MyProjects/MyProject/MyProject.uproject ], stopAtEntry: false, cwd: E:/UE_5.3/Engine/Binaries/Win64, environment: [], console: integratedTerminal, preLaunchTask: BuildEditor(Debug) }, { name: Attach to UE5 Editor, type: cppvsdbg, request: attach, processId: ${command:pickProcess}, program: E:/UE_5.3/Engine/Binaries/Win64/UnrealEditor-Win64-Debug.exe, MIMode: gdb } ] }这里有个坑我必须提前说你编译的是 Development 配置调试器却默认找的是 Debug 配置的 exe二者文件名后缀不同UnrealEditor-Win64-Debug.exe是 Debug 版UnrealEditor-Win64.exe是 Development 版。开发模式下通常用 Development 版跑断点也能命中因为 Development 配置没有做内联优化但如果你改成 Shipping 配置那断点基本全失效。所以日常调试就用 Development别为了“更接近正式版”去切 Shipping 调试那是给自己挖坑。第二种“附加到运行中的编辑器进程”模式很好用。你先手动双击 .uproject 启动编辑器等它完全加载完毕然后在 VS Code 里按F5选择“Attach to UE5 Editor”它会弹出进程选择框你选中UnrealEditor-Win64.exe那一条附加成功后直接能打断点。这种方式省掉了每次从 VS Code 启动编辑器的漫长加载时间我90%的日常调试都是这么干的。4. 从编译到调试完整跑通一次开发流程工具链配置好了接下来要真正走一遍开发流程验证所有环节是通的。我拿一个实际场景演示往工程里添加一个自定义 Actor 类编译、启动编辑器、挂断点、排查一个经典问题。4.1 添加自定义类并触发编译假设我要写一个交互物拾取组件这个类的逻辑在Source/MyProject/Interaction/InteractionComponent.h和.cpp里。写完代码后切回 VS Code按CtrlShiftB选刚才配置的 “BuildEditor(Development)” 任务。第一次编译会跑很久因为 UBT 需要扫描头文件依赖、生成反射数据、编译所有改动涉及的翻译单元。我这条工程几百个源文件全量编译差不多要 5 到 8 分钟增量编译基本控制在 20 秒到 1 分钟内。编译日志里如果出现error C2065、error C2039之类的 MSVC 错误码VS Code 会自动在“问题”面板列出来。这里有个技巧直接点击问题面板的错误条目会跳转到对应代码但 UE 的编译错误往往源头不在报错那一行而在它上面某个宏展开的地方。我习惯把日志往前提三四行看整个上下文特别是 UHTUnreal Header Tool在生成编译期代码时的报错光看“问题面板”容易被误导。编译通过后日志末尾会出现Total execution time和Build succeeded字样。这时候不要急着启动编辑器如果编辑器已经在运行你需要先关掉编辑器再启动新的编译产物否则运行时用的是上一次的 DLL 和缓存。4.2 用附加调试方式启动编辑器关掉旧编辑器后在 VS Code 按F5选择“Launch UE5 Editor (Debug)”或者手动双击 .uproject 启动再附加。我实测下来直接启动 Debug 配置的编辑器加载速度比 Development 慢很多因为它不做优化且带了完整调试符号。为了日常开发爽快我更推荐这种方式双击 .uproject 启动 Development 版编辑器等编辑器完全打开后VS Code 里按F5选择“Attach to UE5 Editor”附加完成后看 VS Code 底部的调试工具栏是否出现“暂停/继续”按钮出现就说明附加成功了。附加调试有个前提编译目标里必须带调试符号。Development 配置默认带符号所以能用。你要是改了 BuildConfiguration 把 Debug 信息关了那断点就永远打不上。4.3 实战排查Overlap 事件不触发的经典问题这次我要调试的是“角色进入触发区域但 Overlap 事件死活不触发”的问题。这个案例在热词里也出现了属于新手高频踩坑。我先在蓝图里看到现象角色走过碰撞盒Actor 上的 OnActorBeginOverlap 事件就是不执行。这种情况下用 VS Code 排查步骤是这样的先在 C 类的代码里找到 Overlap 绑定部分在绑定函数入口打断点。比如我的交互组件在BeginPlay里调用了OnComponentBeginOverlap.AddDynamic(this, UInteractionComponent::OnOverlapBegin)我就把断点下到OnOverlapBegin函数第一行。然后附加到编辑器在编辑器里把角色拖进触发区域看断点有没有命中。如果没命中说明事件没绑定成功或者生成的碰撞事件根本没走到组件上。这时候把断点下到UInteractionComponent::BeginPlay里确认 BeginPlay 到底跑没跑。我遇到的真实情况是BeginPlay 里打印日志发现命中了但绑定函数的签名和 UE 要求的委托签名不一致编译时靠AddDynamic的静态检查过的但运行时事件类型匹配不上就直接没通知。后来我把函数签名改成带UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult SweepResult这四个参数的标准签名问题立刻解决了。另一个高频原因是碰撞盒本身的问题。很多人新建一个 Actor加了一个 BoxComponent但忘记在构造函数里设置碰撞响应默认是ECC_Block且bGenerateOverlapEvents为 false。这种情况断点断在绑定处也看不到事件因为引擎压根没把重叠判定纳入生成事件的范围。在 VS Code 里排查这种问题时我一般直接在构造函数里下条件断点监视GetCollisionEnabled()和GetGenerateOverlapEvents()两个函数的返回值很快就定位了。4.4 利用日志窗口辅助排查断点不是万能的有些只在 Release 下复现的问题你没法挂断点。这时候用 UE 的日志系统配合 VS Code 的终端输出就是最靠谱的方案。我的做法是在代码里加UE_LOG(LogTemp, Warning, TEXT(...))然后在 launch.json 的编辑器运行参数里加上-log这样 UE 的日志输出会直接出现在 VS Code 的调试控制台里。看日志比看断点更能理解事件流和时序特别是多 Actor 交互时断点只能告诉你“这行执行了”日志能告诉你“谁先执行、谁后执行、参数是多少”。如果你要看更底层的物理引擎日志可以把启动参数改成-LogCmdsLogCollision Verbose, LogPhysics Verbose这样能直接看到碰撞检测的完整过程。排查 Overlap 不触发的问题时这个参数基本能一步到位引擎会把每一帧哪些物体发生了重叠、是否生成 Overlap 事件都打印出来。5. 常见问题速查与踩坑实录配置这套环境的过程中一定会遇到各种问题我把几个我踩过、也看别人踩过的典型问题整理成表格后面附上补充说明。问题现象根本原因解决方案IntelliSense 报找不到 “CoreMinimal.h”includePath 缺少引擎中间生成目录在 c_cpp_properties.json 的 includePath 中加入 Intermediate/Build 对应路径VS Code 里能看代码但编译按钮无效没配置 tasks.json 或编译命令参数错误手动创建 tasks.json确保 Build.bat 路径和目标名正确编译报 “The target framework does not exist”缺少对应版本的 .NET SDK安装 .NET 6 / .NET 8 SDK用dotnet --list-sdks验证编译报错但 VS Code 问题面板不显示缺少 problemMatcher 配置tasks.json 里加problemMatcher: [$msCompile]附加调试时进程列表为空编辑器启动的用户权限和 VS Code 不一致都用管理员身份运行或者统一用非管理员用户启动断点命不中、显示“未绑定”编译配置与调试器查找的 exe 不匹配检查 launch.json 的 program 字段是否对应当前编译配置Overlap 事件不触发碰撞盒未开启 GenerateOverlapEvents 或碰撞响应错误构造函数里设置SetGenerateOverlapEvents(true)并配置响应通道中文路径导致编译失败UE5 工具链对非 ASCII 路径支持不完整工程和引擎都放到纯英文路径下生成工程文件时报错卡死引擎路径太长或权限不足引擎装到磁盘根目录的短路径如E:/UE_5.35.1 IntelliSense 头文件飘红这个是最常见的问题网上求助帖一半都是这个。根本原因就两个一是 includePath 没配全二是没有生成 compile_commands.json。我建议直接用 compile_commands.json 方案因为它是按真实编译参数逐文件生成的最准信息路径飘红基本不存在。生成 compile_commands.json 的方式我前面提过用 Python 工具扫描 VCXProj。如果你不想装工具还有一个笨办法在 c_cpp_properties.json 的 includePath 里把所有引擎 Source 目录、插件目录全加一遍路径多了影响智能感知速度但至少能用。我实测发现把Engine/Source/**和Engine/Plugins/**全加进去后补全速度会明显变慢但准确率没问题。两者权衡推荐还是花十分钟生成 compile_commands。5.2 编译日志跳出的错误定位到错误地方MSVC 的报错有时候会指向模板实例化的内部文件看起来完全不是你写的代码。这时候双击问题面板里的错误VS Code 会跳到引擎源码的某个文件里。我的习惯是看编译日志最上面几行那里往往有.cpp文件里实际报错的位置而问题面板默认显示的是模板展开后的最新位置两者结合看才能定位到真正要改的代码。遇到error C2065: XX: 未声明的标识符这类错误时先检查是不是头文件没包含再检查是不是依赖的模块没写进 Build.cs 的 PublicDependencyModuleNames 和 PrivateDependencyModuleNames 里。UE 的编译系统对模块依赖管理很严格你用了某个模块的类但没声明依赖编译器直接报未声明非常容易误判成代码问题。5.3 编译成功但编辑器启动崩溃还有一种情况VS Code 里编译显示成功但双击 .uproject 启动编辑器时闪退。这种一般是热重载残留的脏数据。UE5 的热重载机制在编辑器运行期间修改代码会生成.dll和.h的缓存这些缓存和完整重新编译的产物冲突时就会崩。解决方法很粗暴关掉编辑器删除工程目录下的Binaries、Intermediate目录然后重新生成工程文件再完整编译一次。这个操作会清掉所有中间态代价是下次编译时间翻倍。另外启动闪退时可以打开 Windows 事件查看器找到.exe对应的应用程序错误日志里面会有崩溃模块名比如UE5Editor-CoreUObject.dll之类的那个模块往往就是问题所在。顺带说一句Intermediate目录是整个 UE 编译系统的心跳建议在 .gitignore 里排除它也建议新建工程时就把这个目录加到杀毒软件的白名单里。我踩过的一次坑是 Windows Defender 实时扫描在编译时锁住了Intermediate里的文件导致增量编译持续失败最后放白名单才解决。5.4 编辑器内断点失效我一直强调附加调试要看配置这里再深入聊一下。如果你在 VS Code 里看到断点是实心红色圆点说明断点已经成功绑定到目标进程如果是空心圆点或者带警告标志说明符号信息不匹配或模块没加载。符号信息不匹配的情况最常见于代码改了但编辑器没重启、编译配置变了但调试器还是按旧配置找 exe。我见过有人折腾半天最后发现 launch.json 里 program 写的是UnrealEditor-Win64-Debug.exe但实际上他编译的是 Development 配置启用的进程是UnrealEditor-Win64.exe调试器当然找不到符号。模块没加载的情况则是另一个坑UE5 的插件模块默认是延迟加载的。如果你的断点在某个插件模块里编辑器刚启动时插件还没加载断点会显示“未绑定”。等插件被真正用到的那一刻断点才会慢慢变成实心。解决办法是先触发一下插件初始化逻辑或者干脆在断点编辑器里查看模块是否已经列出。6. 把 VS Code 调教成更顺手的 UE5 IDE前面解决的都是“能不能用”的问题现在聊的是“好不好用”的问题。以下几个设置是我实际体验中提升开发效率最明显的。6.1 settings.json 里的几项关键配置在.vscode/settings.json里我固定加这几项{ editor.formatOnSave: true, C_Cpp.formatting: clangFormat, C_Cpp.clang_format_fallbackStyle: { BasedOnStyle: Google, IndentWidth: 4, ColumnLimit: 0 }, files.associations: { *.uproject: json, *.uplugin: json }, search.exclude: { Intermediate/**: true, Binaries/**: true, DerivedDataCache/**: true, Saved/**: true }, files.watcherExclude: { Intermediate/**: true, Binaries/**: true, Saved/**: true }, files.exclude: { **/*.sln: true } }formatOnSave配合 clang-format 能保证每次保存代码自动格式化。UE5 官方代码风格和 Google 风格差异主要在缩进和命名我把 IndentWidth 设成 4ColumnLimit 设成 0让它不强制换行这样格式风格和 Epic 官方代码基本一致。files.associations让 .uproject 和 .uplugin 以 JSON 语法高亮方便一眼看出结构错误。search.exclude和files.watcherExclude很关键UE 的 Intermediate、Binaries、Saved 目录文件数量巨大不排除的话 VS Code 的搜索和文件监听会变得极其卡顿特别是当你开着 Git 仓库时涉及这几千个生成文件会直接把 IO 拉满。6.2 clang-format 和代码规范用 clang-format 是 UE5 社区开发者的共识。装好 C/C 插件后你需要准备一份 .clang-format 文件放在工程根目录这样 VS Code 保存时自动套用。如果没有现成的格式文件我会参考 UE5 引擎源码里的.clang-format抄一份然后关掉SortIncludes选项因为 UE 的模块头文件顺序有自己的习惯让 clang-format 乱排序会破坏原有风格。值得注意的一点clang-format 格式化会改动空格和换行当你开 PR 时如果先跑了一遍格式化和没格式化前的代码对比会有一大堆无关 diff。我的习惯是只在新增代码或者小改动时让它格式化本次涉及的文件而不是全仓库一次性跑完。真要强制统一格式记得单独开一个提交别混在功能提交里。6.3 Git 集成和 Live CodingVS Code 的 Git 面板比 Visual Studio 的体验好很多至少不用频繁刷新。配合 UE5 的 C 开发我总结了一套相对舒服的流程代码编辑在 VS Code 里提交代码前先编译一次编译通过后切到编辑器窗口用即时编译工具Live Coding做热更新测试最后再回到 VS Code 提交。Live Coding 这个功能值得单独提一下。UE5 默认支持 Live Coding你在编辑器里按CtrlAltF11就能把新编译的代码热加载到运行中的编辑器里不需要重启。但前提是你用编辑器内置的编译按钮或者 Live Coding 触发的编译如果你用 VS Code 的 tasks.json 手动编译编辑器不知道你已经改了代码热加载不会自动触发。我实测过两种用法。一是在编辑器里按CtrlAltF11热编译这种模式生成的编译产物路径和 VS Code 的 tasks.json 不完全一样但二者不会冲突。二是完全放弃热编译每次改了 C 都关掉编辑器用 VS Code 编译再重新启动编辑器。后面这种方式虽然慢但胜在干净不会遇到热重载导致的崩溃和状态残留。日常改几个变量、调一下参数用热编译没问题但是跨模块重构、改类继承关系这类大改动我还是老老实实重启编辑器。7. 一点个人体会到最后说点实在话。VS Code 配 UE5 这条路刚开始确实比直接用 Visual Studio 折腾配置环境就能耗掉大半天。但一旦配好日常开发的顺滑感是值得的。启动快、不卡顿、Git 操作顺手、远程开发一条命令切过去这些都是 Visual Studio 比不了的。我个人坦诚地说这套方案比较适合有一定 C 工程经验、能自己读懂编译报错的人。如果你是第一次接触 C 和引擎直接上 Visual Studio 可能是更稳的选择因为它的集成度更高出错时提示更友好。VS Code 的每个环节都是松耦合组件任何一个环节断了你都得有点知识储备才能接回去。最后给大家留个小建议搭好环境之后把关键配置文件tasks.json、c_cpp_properties.json、launch.json复制到工程根目录下的.vscode_template文件夹里平时不随工程提交。这样每次在别的电脑上拉取代码直接把模板目录拷贝回.vscode就能恢复整个开发环境不用重新记忆配置细节。我自己换电脑、加笔记本都是靠这一招在十分钟内恢复完整开发环境。
返回列表