公司动态
Ubuntu 22.04 上从零编译与部署虚幻引擎5(UE5)完整指南
1. 从零开始的抉择为什么要在Ubuntu上搞UE5最近几年虚幻引擎5UE5的势头有多猛不用我多说。Nanite、Lumen这些技术让很多个人开发者和中小团队也能做出以前不敢想的画面效果。但一提到开发环境绝大多数教程、文档甚至Epic官方默认的推荐都是Windows。这很正常毕竟DirectX、Visual Studio这些微软自家的东西在Windows上配合得天衣无缝。那为什么还要折腾非要在Ubuntu 22.04.4上搭建UE5环境呢我最初也是被这个问题困扰。直到我手头的项目遇到了几个具体需求一是需要部署到基于Linux的云服务器或边缘计算设备上进行渲染或AI推理二是团队里有成员主力开发机就是Linux希望保持开发环境的一致性三是想深入研究引擎的编译和构建过程Linux下的命令行工具链和开源生态让人感觉更“透明”、更可控。如果你也有类似的需求或者单纯就是想挑战一下把UE5这个“巨无霸”在Linux上跑起来那这篇记录或许能帮你省下几十个小时的摸索时间。我必须提前说清楚这个过程不会像在Windows上点几下“下一步”那么简单你会遇到各种依赖、编译错误和配置问题。但一旦搞定你会对UE5的构建系统、Linux开发环境有更深的理解这种掌控感是很有价值的。2. 战前准备硬件、系统与基础依赖的硬性门槛在真正动手之前我们必须把地基打牢。在Ubuntu上编译UE5对硬件和系统环境的要求比单纯运行一个二进制程序要高得多。2.1 硬件与系统配置没有妥协的余地首先看硬件。UE5的源码编译是一个极度消耗CPU、内存和磁盘I/O的过程。根据我的经验和个人实测以下是最低配置和推荐配置CPU最低需要6核12线程的现代处理器。推荐使用8核16线程或以上的CPU如AMD Ryzen 7/9系列或Intel Core i7/i9系列。更多的核心能显著缩短编译时间。内存这是最关键的部分。官方文档建议至少32GB。但我以亲身经历告诉你32GB是“能编译”的门槛过程中系统可能会频繁使用Swap导致编译速度极慢甚至卡死。强烈推荐64GB或以上内存。在我的64GB内存机器上完整编译UE5引擎耗时约2.5小时且全程流畅。而在另一台32GB的机器上仅编译Development Editor配置就花了近6小时且后期因内存不足多次假死。磁盘空间你需要准备至少150GB的可用固态硬盘SSD空间。这包括了源码、编译中间文件、引擎二进制文件以及派生数据缓存。使用机械硬盘HDD基本是不可行的漫长的I/O等待会让你崩溃。显卡虽然编译阶段对显卡要求不高但为了后续能流畅运行编辑器一块支持Vulkan 1.1或更高版本的独立显卡是必须的。NVIDIA显卡在Linux下的驱动支持相对更好。系统方面我们选择Ubuntu 22.04.4 LTS。LTS长期支持版本意味着稳定的软件源和长期的安全更新能减少因系统升级带来的不兼容问题。请确保你的系统已经更新到最新sudo apt update sudo apt upgrade -y2.2 安装核心编译工具链UE5的构建系统依赖于一套特定的工具。我们需要安装编译器和构建工具。安装Clang和LLVMUE5推荐使用Clang编译器。Ubuntu 22.04默认的Clang版本可能不够新我们需要安装特定版本。Epic官方推荐使用其自定义的Clang版本但为了初步搭建我们可以先安装系统仓库中的较新版本。sudo apt install -y clang-14 lld-14 llvm-14安装后可以通过clang-14 --version和lld-14 --version验证。安装构建工具我们需要CMake、Ninja一种更快的构建系统等。sudo apt install -y cmake ninja-build build-essential安装.NET SDKUE5的部分工具如UnrealBuildTool是用C#编写的需要.NET运行时。我们安装.NET 6.0 SDKUbuntu 22.04仓库中的版本。sudo apt install -y dotnet62.3 处理关键的第三方依赖库这是Linux环境下最繁琐但也最重要的一步。UE5依赖大量的第三方库我们需要手动安装它们。缺少任何一个都可能导致编译在后期功亏一篑。创建一个安装脚本文件比如install_deps.sh将以下命令粘贴进去。请逐条执行并注意观察是否有安装失败的错误信息。#!/bin/bash # 1. 更新包列表并安装基础工具 sudo apt update sudo apt install -y software-properties-common wget git # 2. 安装多媒体库音频、视频编解码 sudo apt install -y libx264-dev libx265-dev libvpx-dev libopus-dev libogg-dev libtheora-dev libvorbis-dev sudo apt install -y libasound2-dev libpulse-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev # 3. 安装图形与窗口系统库 (X11, Wayland, Vulkan, OpenGL) sudo apt install -y libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev sudo apt install -y libwayland-dev wayland-protocols libxkbcommon-dev sudo apt install -y mesa-common-dev libglu1-mesa-dev sudo apt install -y vulkan-tools libvulkan-dev vulkan-validationlayers-dev # 4. 安装网络与IO库 sudo apt install -y libssl-dev zlib1g-dev libbz2-dev sudo apt install -y libcurl4-openssl-dev libncurses5-dev # 5. 安装其他杂项但必需的库 sudo apt install -y libsdl2-dev libfreetype6-dev libgtk-3-dev sudo apt install -y libdouble-conversion-dev libicu-dev libtbb-dev保存后给脚本执行权限并运行chmod x install_deps.sh ./install_deps.sh这个过程会下载安装上百个包请保持网络通畅。全部完成后我们的基础环境就准备好了。3. 获取UE5源代码从Epic Games账户到本地仓库UE5的源代码不公开分发你需要有一个关联了GitHub账户的Epic Games账户并同意开发者协议。3.1 关联账户与访问权限访问 Epic Games 开发者门户 使用你的Epic账户登录。在账户设置中找到“连接”部分将你的Epic账户与GitHub账户关联。同意“虚幻引擎最终用户许可协议”中的源代码访问条款。完成以上步骤后你就获得了访问https://github.com/EpicGames/UnrealEngine这个私有仓库的权限。3.2 使用Git克隆源码在Ubuntu上我们使用Git来拉取代码。首先确保已安装Gitsudo apt install -y git。然后在一个空间充足的目录如~/UnrealEngine下执行克隆命令。注意UE5仓库非常庞大有几十GB下载需要很长时间请耐心等待。cd ~ git clone https://github.com/EpicGames/UnrealEngine.git -b release这里-b release指定克隆release分支这是相对稳定的版本。你也可以克隆ue5.2或ue5.3等特定版本分支。提示如果网络不稳定导致克隆中断可以使用git fetch --unshallow和git pull来继续但更推荐使用稳定的网络环境一次完成。克隆完成后进入引擎目录运行附带的设置脚本。这个脚本会下载一些额外的二进制依赖如 .NET 工具链的特定版本、Quixel Bridge等并检查环境。cd UnrealEngine ./Setup.sh这个Setup.sh脚本运行时间也比较长它会通过Git拉取子模块Submodules并下载预编译的组件。期间可能需要你输入GitHub的用户名和密码或Personal Access Token来验证私有仓库的访问权限。4. 编译引擎一场对耐心和硬件的终极考验当Setup.sh脚本成功运行完毕后我们就来到了最核心也最耗时的环节——编译虚幻引擎本身。4.1 生成项目文件UE5使用它自己的构建工具链。首先我们需要运行GenerateProjectFiles.sh来生成用于编译的Makefile或Ninja构建文件。./GenerateProjectFiles.sh这个脚本会分析引擎的模块依赖关系并生成Makefile文件。如果一切顺利你会在输出中看到大量“Checking...”和“Log...”信息最后以“GenerateProjectFiles 成功完成”结束。4.2 执行编译命令接下来使用make命令开始编译。这里有几个关键的编译目标Target和配置Configuration需要了解编译目标UnrealEditor编译编辑器本身。这是我们主要需要的。UnrealGame编译一个独立的游戏运行时不包含编辑器功能。UnrealClient和UnrealServer用于网络游戏。编译配置Debug包含完整的调试符号运行慢用于深度调试。DebugGame游戏代码可调试引擎代码为开发配置。Development最常用的配置。包含部分调试信息优化等级适中适合日常开发。Shipping完全优化剥离所有调试信息用于最终发布。Test用于自动化测试。对于首次编译和日常开发我们编译Development Editor配置。使用-j参数指定并行编译的作业数通常设置为你的CPU线程数以最大化利用多核性能。make UnrealEditor Linux Development -j$(nproc)这里的$(nproc)会自动获取你CPU的核心数。例如16线程的CPU就会使用-j16。现在泡杯茶离开电脑几个小时吧。编译过程会输出大量信息你可以观察它正在编译哪个模块。如果遇到错误编译会停止并将错误信息打印在终端。4.3 常见编译错误与解决方案在我多次的编译经历中几乎每次都会遇到不同的问题。以下是几个最典型的“坑”及其填法“fatal error: ‘stddef.h’ file not found” 或类似找不到标准库头文件原因Clang编译器没有找到正确的C标准库路径。Ubuntu上Clang默认可能不包含标准库需要额外安装。解决安装libstdc-12-dev版本号需与你安装的Clang匹配Clang-14对应g-12。sudo apt install -y g-12 libstdc-12-dev然后在编译命令前设置环境变量明确告诉编译器使用哪个标准库export CC/usr/bin/clang-14 export CXX/usr/bin/clang-14 make UnrealEditor Linux Development -j$(nproc)“undefined reference to ‘symbol’…” 链接错误原因缺少某个共享库.so文件或者链接器找不到它。这通常是因为我们安装的依赖库名称或路径与UE5构建系统硬编码的查找路径不一致。解决这是最棘手的一类错误。首先根据错误信息中的符号名用apt-file search或上网搜索确定它属于哪个开发包-dev包。例如错误提到vulkan你可能需要检查libvulkan-dev是否已安装或者尝试安装更通用的vulkan-utils。有时需要创建符号链接。例如如果它寻找libXXX.so.1但系统只有libXXX.so.1.2.3可以sudo ln -s /usr/lib/x86_64-linux-gnu/libXXX.so.1.2.3 /usr/lib/x86_64-linux-gnu/libXXX.so.1编译过程中内存耗尽进程被杀死现象终端突然显示Killed或者系统变得极其卡顿然后编译中断。原因物理内存和Swap空间均被耗尽。这是硬件资源不足的直接表现。解决临时方案减少并行编译作业数。将-j$(nproc)改为-j4或更小降低内存峰值使用量。但这会大幅增加编译时间。根本方案增加物理内存。对于UE5编译64GB内存是舒适的起点。也可以尝试增加Swap空间但这只是权宜之计速度会非常慢。“.NET SDK 未找到” 或 “Could not execute because the application was not found”原因Setup.sh下载的 .NET 工具路径未被正确识别或者系统安装了多个 .NET 版本导致冲突。解决尝试指定完整的 .NET 路径。进入UnrealEngine/Engine/Binaries/DotNET目录查看是否存在dotnet可执行文件。然后在编译时设置环境变量export DOTNET_ROOT“/path/to/your/UnrealEngine/Engine/Binaries/DotNET” export PATH“$DOTNET_ROOT:$PATH”然后重新运行GenerateProjectFiles.sh和make。5. 首次运行与项目创建验证你的劳动成果当终端最终停止滚动并出现类似“UnrealEditor 编译成功”的字样时恭喜你最艰难的部分已经过去了。5.1 启动虚幻编辑器编译生成的编辑器二进制文件位于UnrealEngine/Engine/Binaries/Linux/UnrealEditor你可以直接运行它来启动编辑器cd ~/UnrealEngine/Engine/Binaries/Linux ./UnrealEditor首次启动会进行一些额外的初始化工作比如编译着色器、构建本地化的资源等这可能需要几分钟。如果一切顺利你将看到虚幻引擎5的编辑器主界面在Ubuntu的桌面环境中弹出来。这一刻的成就感足以抵消之前所有的折腾。5.2 创建并测试一个空白项目为了确保引擎功能完整我们创建一个最简单的项目来测试。在启动的编辑器界面中选择“游戏”Games类别然后选择“空白”Blank模板。选择项目保存路径取一个项目名例如MyLinuxProject。确保“目标平台”中包含了“Linux”取消勾选“初学者内容包”以加快创建速度。点击“创建”Create。项目创建完成后尝试进行以下操作来验证核心功能场景操作在视口中拖动物体、旋转视角确保图形渲染和输入响应正常。内容浏览器右键创建新的材质或蓝图类检查资源创建流程。打包项目点击菜单栏的“平台”Platforms - “Linux” - “打包项目”Package Project。这能最终验证整个工具链是否畅通。打包过程会再次编译你的项目代码和内容输出一个可在其他Linux机器上独立运行的游戏版本。5.3 可能遇到的运行时问题即使编辑器成功启动在操作中也可能遇到问题输入法冲突在编辑器内输入文本时可能会与Ubuntu的输入法框架如IBus冲突导致无法正常输入或卡顿。解决在启动编辑器前在终端中设置环境变量禁用输入法export GTK_IM_MODULExim export QT_IM_MODULExim ./UnrealEditor或者将系统默认输入法切换为fcitx并配置使用xim模块兼容性通常更好。Vulkan驱动问题编辑器启动失败或渲染异常提示Vulkan错误。解决确保安装了正确的显卡驱动。对于NVIDIA显卡务必从官网或使用ubuntu-drivers工具安装专有驱动而不是开源的nouveau驱动。sudo ubuntu-drivers autoinstall sudo reboot音频无法播放编辑器内没有声音。解决UE5在Linux上默认使用PulseAudio。确保pulseaudio服务正在运行。可以安装pavucontrolPulseAudio音量控制来检查和调整音频输出设备。6. 集成开发环境配置让C编码如虎添翼在Linux上开发UE5 C项目一个好的IDE至关重要。虽然你可以用任何文本编辑器但集成代码索引、跳转、重构和调试功能的IDE能极大提升效率。6.1 Visual Studio Code轻量灵活之选VS Code配合微软的C扩展和UE相关的插件是目前非常流行的方案。安装VS Code从微软官网下载.deb包安装或使用Snapsudo snap install code --classic安装必要扩展C/C(ms-vscode.cpptools)提供核心的C语言支持。CMake Tools(ms-vscode.cmake-tools)如果你需要直接处理CMakeLists.txt。Unreal Engine Snippets提供UE特有的代码片段。Shader Languages Support for VS Code支持HLSL着色器语法高亮。配置项目用VS Code打开你的UE5项目根目录包含.uproject文件的目录。VS Code可能会自动检测到CMake项目但UE5项目主要使用它自己的构建系统。我们需要手动配置c_cpp_properties.json。按CtrlShiftP输入 “C/C: Edit Configurations (UI)”打开配置界面。在“包含路径”中添加引擎和项目的核心头文件路径。这是一个繁琐但一次性的工作。至少需要添加“${workspaceFolder}/Source”“${workspaceFolder}/../../UnrealEngine/Engine/Source/Runtime”(根据你的引擎路径调整)“${workspaceFolder}/../../UnrealEngine/Engine/Source”你还可以添加“${workspaceFolder}/../../UnrealEngine/Engine/Intermediate/Build/Linux/x86_64/UE5Editor/Inc”来包含生成的头文件。在“编译器路径”中设置为/usr/bin/clang-14。在“IntelliSense 模式”中选择linux-clang-x64。6.2 Rider for Unreal Engine专业高效之选如果你预算允许JetBrains出品的Rider for Unreal Engine是当前公认的最强大的UE C开发IDE。它对UE的宏、反射系统、蓝图/C交互有着深度的理解和支持。安装从JetBrains官网下载Rider的.tar.gz包解压后运行bin/rider.sh即可。首次配置启动Rider后它会自动检测系统安装的Unreal Engine版本。你需要将Rider指向你编译好的UE5引擎根目录即~/UnrealEngine。打开项目直接打开.uproject文件Rider会自动识别为Unreal项目并建立完整的代码索引。它能够理解UCLASS、UFUNCTION等宏提供准确的代码补全、导航到蓝图引用、实时显示UE日志等功能。6.3 调试配置调试是开发中不可或缺的一环。在Linux上我们可以使用GDB或LLDB。在VS Code中调试在VS Code中打开你的项目。切换到“运行和调试”侧边栏。点击“创建 launch.json 文件”选择C (GDB/LLDB)。配置launch.json。一个简单的配置示例如下用于启动编辑器并加载你的项目{ “version”: “0.2.0”, “configurations”: [ { “name”: “(gdb) Launch UnrealEditor”, “type”: “cppdbg”, “request”: “launch”, “program”: “${env:HOME}/UnrealEngine/Engine/Binaries/Linux/UnrealEditor”, “args”: [“${workspaceFolder}/YourProject.uproject”], “stopAtEntry”: false, “cwd”: “${workspaceFolder}”, “environment”: [], “externalConsole”: false, “MIMode”: “gdb”, “setupCommands”: [ { “description”: “为 gdb 启用整齐打印”, “text”: “-enable-pretty-printing”, “ignoreFailures”: true } ] } ] }设置断点然后按F5启动调试。编辑器将以调试模式启动当执行到你的C断点时VS Code会暂停并显示调用栈和变量信息。在Rider中调试Rider的调试体验更集成化。通常只需点击项目旁边的“调试”按钮绿色的虫子图标它会自动处理启动参数和符号加载断点命中后能直接显示UE对象的内省信息非常方便。7. 日常维护与进阶调优环境搭建好只是开始要让它在日常开发中稳定高效还需要一些维护和调优技巧。7.1 更新引擎源代码UE5在持续更新你可能需要拉取最新的代码并重新编译。cd ~/UnrealEngine git pull origin release ./Setup.sh make UnrealEditor Linux Development -j$(nproc)注意更新后重新运行Setup.sh是必要的因为它会检查并更新二进制依赖。重新编译通常可以增量进行但有时大的架构更改可能需要清理中间文件make clean甚至整个Engine/Intermediate和Engine/Binaries目录。7.2 管理磁盘空间UE5及其派生数据会占用大量空间。定期清理可以节省上百GB空间。清理派生数据缓存位于~/.local/share/UnrealEngine/下。你可以安全地删除整个DerivedDataCache目录引擎会在需要时重新生成但首次加载项目会变慢。清理编译中间文件在引擎或项目目录下执行make clean会删除Intermediate目录中的编译产出物但保留下载的第三方库和生成的项目文件。彻底清理如果你想从一个绝对干净的状态开始可以删除Engine/Binaries和Engine/Intermediate目录然后重新运行GenerateProjectFiles.sh和make。这会触发完整重新编译。7.3 性能调优建议使用ccache加速编译ccache是一个编译器缓存工具对于频繁的增量编译提速效果显著。sudo apt install -y ccache在编译命令前设置环境变量即可启用export CC“ccache clang-14” export CXX“ccache clang-14” make UnrealEditor Linux Development -j$(nproc)ccache会缓存编译结果下次编译相同代码时直接使用缓存对于大型项目如UE5在修改少量文件后的重新编译速度提升可达数倍。将派生数据缓存放在RAMDisk上如果你的内存足够大比如128GB以上可以将派生数据缓存目录挂载到内存盘中能极大提升材质、纹理等资源的加载速度。sudo mkdir /mnt/ramdisk sudo mount -t tmpfs -o size30g tmpfs /mnt/ramdisk ln -s /mnt/ramdisk/DDC ~/.local/share/UnrealEngine/DerivedDataCache注意重启后RAMDisk内容会丢失需要重新建立链接。这只在频繁切换项目进行测试时收益明显。监控系统资源在编译或运行大型项目时使用htop、nvidia-smi等工具监控CPU、内存、GPU使用情况有助于及时发现瓶颈。搭建Ubuntu下的UE5开发环境就像在Linux上建造一座重型机械的工厂。过程充满挑战需要耐心地解决一个个依赖和编译错误。但一旦生产线工具链打通你获得的不仅是一个可用的编辑器更是对这套庞大系统底层运作的深刻理解。这种理解在你需要定制引擎、优化性能、或者解决那些只在特定Linux发行版上出现的诡异问题时将是无价的。对于面向Linux平台部署的云渲染、服务器应用或特定嵌入式场景这份投入更是必要且值得的。希望这篇详尽的记录能作为你的路线图助你顺利抵达终点。