Ubuntu 22.04 上从零编译与部署虚幻引擎5(UE5)完整指南
2026/8/13 6:41:22 网站建设 项目流程

1. 从零开始的抉择:为什么要在Ubuntu上搞UE5?

最近几年,虚幻引擎5(UE5)的势头有多猛,不用我多说。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 -y

2.2 安装核心编译工具链

UE5的构建系统依赖于一套特定的工具。我们需要安装编译器和构建工具。

  1. 安装Clang和LLVM:UE5推荐使用Clang编译器。Ubuntu 22.04默认的Clang版本可能不够新,我们需要安装特定版本。Epic官方推荐使用其自定义的Clang版本,但为了初步搭建,我们可以先安装系统仓库中的较新版本。

    sudo apt install -y clang-14 lld-14 llvm-14

    安装后,可以通过clang-14 --versionlld-14 --version验证。

  2. 安装构建工具:我们需要CMake、Ninja(一种更快的构建系统)等。

    sudo apt install -y cmake ninja-build build-essential
  3. 安装.NET SDK:UE5的部分工具(如UnrealBuildTool)是用C#编写的,需要.NET运行时。我们安装.NET 6.0 SDK(Ubuntu 22.04仓库中的版本)。

    sudo apt install -y dotnet6

2.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 关联账户与访问权限

  1. 访问 Epic Games 开发者门户 ,使用你的Epic账户登录。
  2. 在账户设置中,找到“连接”部分,将你的Epic账户与GitHub账户关联。
  3. 同意“虚幻引擎最终用户许可协议”中的源代码访问条款。
  4. 完成以上步骤后,你就获得了访问https://github.com/EpicGames/UnrealEngine这个私有仓库的权限。

3.2 使用Git克隆源码

在Ubuntu上,我们使用Git来拉取代码。首先确保已安装Git:sudo apt install -y git

然后,在一个空间充足的目录(如~/UnrealEngine)下执行克隆命令。注意,UE5仓库非常庞大,有几十GB,下载需要很长时间,请耐心等待。

cd ~ git clone https://github.com/EpicGames/UnrealEngine.git -b release

这里-b release指定克隆release分支,这是相对稳定的版本。你也可以克隆ue5.2ue5.3等特定版本分支。

提示:如果网络不稳定导致克隆中断,可以使用git fetch --unshallowgit 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:编译一个独立的游戏运行时(不包含编辑器功能)。
    • UnrealClientUnrealServer:用于网络游戏。
  • 编译配置
    • Debug:包含完整的调试符号,运行慢,用于深度调试。
    • DebugGame:游戏代码可调试,引擎代码为开发配置。
    • Development最常用的配置。包含部分调试信息,优化等级适中,适合日常开发。
    • Shipping:完全优化,剥离所有调试信息,用于最终发布。
    • Test:用于自动化测试。

对于首次编译和日常开发,我们编译Development Editor配置。使用-j参数指定并行编译的作业数,通常设置为你的CPU线程数,以最大化利用多核性能。

make UnrealEditor Linux Development -j$(nproc)

这里的$(nproc)会自动获取你CPU的核心数。例如,16线程的CPU就会使用-j16

现在,泡杯茶,离开电脑几个小时吧。编译过程会输出大量信息,你可以观察它正在编译哪个模块。如果遇到错误,编译会停止,并将错误信息打印在终端。

4.3 常见编译错误与解决方案

在我多次的编译经历中,几乎每次都会遇到不同的问题。以下是几个最典型的“坑”及其填法:

  1. “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)
  2. “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
  3. 编译过程中内存耗尽,进程被杀死

    • 现象:终端突然显示Killed,或者系统变得极其卡顿然后编译中断。
    • 原因:物理内存和Swap空间均被耗尽。这是硬件资源不足的直接表现。
    • 解决
      • 临时方案:减少并行编译作业数。将-j$(nproc)改为-j4或更小,降低内存峰值使用量。但这会大幅增加编译时间。
      • 根本方案:增加物理内存。对于UE5编译,64GB内存是舒适的起点。也可以尝试增加Swap空间,但这只是权宜之计,速度会非常慢。
  4. “.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.shmake

5. 首次运行与项目创建:验证你的劳动成果

当终端最终停止滚动,并出现类似“UnrealEditor 编译成功”的字样时,恭喜你,最艰难的部分已经过去了。

5.1 启动虚幻编辑器

编译生成的编辑器二进制文件位于:UnrealEngine/Engine/Binaries/Linux/UnrealEditor

你可以直接运行它来启动编辑器:

cd ~/UnrealEngine/Engine/Binaries/Linux ./UnrealEditor

首次启动会进行一些额外的初始化工作,比如编译着色器、构建本地化的资源等,这可能需要几分钟。如果一切顺利,你将看到虚幻引擎5的编辑器主界面在Ubuntu的桌面环境中弹出来。这一刻的成就感,足以抵消之前所有的折腾。

5.2 创建并测试一个空白项目

为了确保引擎功能完整,我们创建一个最简单的项目来测试。

  1. 在启动的编辑器界面中,选择“游戏”(Games)类别,然后选择“空白”(Blank)模板。
  2. 选择项目保存路径,取一个项目名,例如MyLinuxProject
  3. 确保“目标平台”中包含了“Linux”,取消勾选“初学者内容包”以加快创建速度。
  4. 点击“创建”(Create)。

项目创建完成后,尝试进行以下操作来验证核心功能:

  • 场景操作:在视口中拖动物体、旋转视角,确保图形渲染和输入响应正常。
  • 内容浏览器:右键创建新的材质或蓝图类,检查资源创建流程。
  • 打包项目:点击菜单栏的“平台”(Platforms) -> “Linux” -> “打包项目”(Package Project)。这能最终验证整个工具链是否畅通。打包过程会再次编译你的项目代码和内容,输出一个可在其他Linux机器上独立运行的游戏版本。

5.3 可能遇到的运行时问题

即使编辑器成功启动,在操作中也可能遇到问题:

  • 输入法冲突:在编辑器内输入文本时,可能会与Ubuntu的输入法框架(如IBus)冲突,导致无法正常输入或卡顿。

    • 解决:在启动编辑器前,在终端中设置环境变量禁用输入法:
      export GTK_IM_MODULE=xim export QT_IM_MODULE=xim ./UnrealEditor
      或者,将系统默认输入法切换为fcitx并配置使用xim模块,兼容性通常更好。
  • Vulkan驱动问题:编辑器启动失败或渲染异常,提示Vulkan错误。

    • 解决:确保安装了正确的显卡驱动。对于NVIDIA显卡,务必从官网或使用ubuntu-drivers工具安装专有驱动,而不是开源的nouveau驱动。
      sudo ubuntu-drivers autoinstall sudo reboot
  • 音频无法播放:编辑器内没有声音。

    • 解决:UE5在Linux上默认使用PulseAudio。确保pulseaudio服务正在运行。可以安装pavucontrol(PulseAudio音量控制)来检查和调整音频输出设备。

6. 集成开发环境配置:让C++编码如虎添翼

在Linux上开发UE5 C++项目,一个好的IDE至关重要。虽然你可以用任何文本编辑器,但集成代码索引、跳转、重构和调试功能的IDE能极大提升效率。

6.1 Visual Studio Code:轻量灵活之选

VS Code配合微软的C++扩展和UE相关的插件,是目前非常流行的方案。

  1. 安装VS Code:从微软官网下载.deb包安装,或使用Snap:

    sudo snap install code --classic
  2. 安装必要扩展

    • 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着色器语法高亮。
  3. 配置项目

    • 用VS Code打开你的UE5项目根目录(包含.uproject文件的目录)。
    • VS Code可能会自动检测到CMake项目,但UE5项目主要使用它自己的构建系统。我们需要手动配置c_cpp_properties.json
    • Ctrl+Shift+P,输入 “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++交互有着深度的理解和支持。

  1. 安装:从JetBrains官网下载Rider的.tar.gz包,解压后运行bin/rider.sh即可。
  2. 首次配置:启动Rider后,它会自动检测系统安装的Unreal Engine版本。你需要将Rider指向你编译好的UE5引擎根目录(即~/UnrealEngine)。
  3. 打开项目:直接打开.uproject文件,Rider会自动识别为Unreal项目,并建立完整的代码索引。它能够理解UCLASSUFUNCTION等宏,提供准确的代码补全、导航到蓝图引用、实时显示UE日志等功能。

6.3 调试配置

调试是开发中不可或缺的一环。在Linux上,我们可以使用GDB或LLDB。

  • 在VS Code中调试

    1. 在VS Code中打开你的项目。
    2. 切换到“运行和调试”侧边栏。
    3. 点击“创建 launch.json 文件”,选择C++ (GDB/LLDB)
    4. 配置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 } ] } ] }
    5. 设置断点,然后按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/IntermediateEngine/Binaries目录。

7.2 管理磁盘空间

UE5及其派生数据会占用大量空间。定期清理可以节省上百GB空间。

  • 清理派生数据缓存:位于~/.local/share/UnrealEngine/下。你可以安全地删除整个DerivedDataCache目录,引擎会在需要时重新生成,但首次加载项目会变慢。
  • 清理编译中间文件:在引擎或项目目录下执行make clean会删除Intermediate目录中的编译产出物,但保留下载的第三方库和生成的项目文件。
  • 彻底清理:如果你想从一个绝对干净的状态开始,可以删除Engine/BinariesEngine/Intermediate目录,然后重新运行GenerateProjectFiles.shmake。这会触发完整重新编译。

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 size=30g tmpfs /mnt/ramdisk ln -s /mnt/ramdisk/DDC ~/.local/share/UnrealEngine/DerivedDataCache

    注意:重启后RAMDisk内容会丢失,需要重新建立链接。这只在频繁切换项目进行测试时收益明显。

  • 监控系统资源:在编译或运行大型项目时,使用htopnvidia-smi等工具监控CPU、内存、GPU使用情况,有助于及时发现瓶颈。

搭建Ubuntu下的UE5开发环境,就像在Linux上建造一座重型机械的工厂。过程充满挑战,需要耐心地解决一个个依赖和编译错误。但一旦生产线(工具链)打通,你获得的不仅是一个可用的编辑器,更是对这套庞大系统底层运作的深刻理解。这种理解,在你需要定制引擎、优化性能、或者解决那些只在特定Linux发行版上出现的诡异问题时,将是无价的。对于面向Linux平台部署的云渲染、服务器应用或特定嵌入式场景,这份投入更是必要且值得的。希望这篇详尽的记录,能作为你的路线图,助你顺利抵达终点。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询