Unreal Engine 5
Unreal Engine 5 是由 Epic Games 创建的最新版游戏引擎。
本文内容最初撰写于 Unreal Engine wiki,并已针对 Arch Linux 进行了特别改编。
前提条件
请参阅 推荐硬件。
获取源代码访问权限
Unreal Engine 源代码位于一个私有的 GitHub 仓库中,需要 免费向开发者(Epic Games)注册以获取访问权限。
要获取访问权限,请在 Epic Games 账户 登录或注册,并在 Epic Games '关联账户' 页面的底部提供一个可访问的 GitHub 用户名。然后 GitHub 会发送一封电子邮件邀请您加入 GitHub 上的 @EpicGames 组织,从而获得对私有仓库的访问权限。
克隆
由于该仓库是私有的,您应该 设置 SSH 密钥,以便使用您的 GitHub 账户克隆源代码。
只克隆所需分支的速度更快
$ git clone git@github.com:EpicGames/UnrealEngine.git --branch release --single-branch
编译
您可以手动从下载的 GitHub 版本编译,或从 AUR 安装。默认情况下,引擎将在所有物理核心上进行编译。
手动设置
您可以从 GitHub 获取最新的 ZIP 版本。
设置
$ ./Setup.sh
生成项目文件
$ ./GenerateProjectFiles.sh
然后编译
$ make -j1
这将编译 Unreal Engine 和 Unreal Editor。
-jN (例如 -j12)。这会导致构建失败并提示 another instance of UnrealBuildTool is running。此标志不影响单个源文件的并行编译,它影响子模块的并行运行。Build.sh 脚本进行构建,如下所示。某些模块可能在第一次尝试时仍然失败,但重复运行 Build.sh 脚本似乎可以解决问题(与重新运行 make 不同)。$ ./Engine/Build/BatchFiles/Linux/Build.sh UnrealEditor Linux Development -Progress
从 AUR 获取
Unreal Engine 5 可在 AUR 中作为 unreal-engineAUR 包提供。您可能需要修复权限,以便 UE5 在首次启动时预编译着色器。
# chmod -R a+rwX /opt/unreal-engine/Engine
对于 5.4 版本,安装大小约为 190 GiB,需要 340+ GiB 才能构建,最终压缩包约为 45 GiB。此 PKGBUILD 下载约 20 GiB 的源代码加上约 5 GiB 的依赖项。
为了减小下载量,您可以将 .zip 版本用作 PKGBUILD 的源。请注意,除非您首先按照 上面 概述的步骤操作,否则此链接将无法正常工作。
从 Epic Games Store 获取
预编译的二进制文件也可通过 Epic 的 游戏商店 获取。这些 .zip 文件包含预编译的二进制文件,无需进行上述设置步骤。
尽管如此,您仍然需要先决条件依赖项才能运行解压后的二进制文件(请参考 aur)。下载后,您应该可以随意将文件解压到任何位置,并使用解压路径中的二进制文件启动编辑器。
$ Linux_Unreal_Engine_5.x.x/Engine/Binaries/Linux/UnrealEditor
Linux_Unreal_Engine_5.5.4 的 zip 文件大小为 25.2GB,解压后约为 43GB。
编译时间
对于平均高端消费级 CPU(i9/Ryzen9),编译将需要 4-5 小时。通过强制使用所有核心而不是仅使用物理核心(这是默认的编译方式)可以稍微加快此速度。此数字不包括首次启动后编译着色器所需的时间。
(Ryzen 9 6900HX 编译 UE5.4.2 大约需要 5 小时,使用所有 (8) 个物理核心,在下载完依赖项后。之后打包、解包和编译着色器又花费了一个小时,因此总安装时间(下载完依赖项后)约为 6 小时。)
故障排除
编译问题
如果编译失败,您应该尝试使用 Debug 配置文件构建 Editor [1]
$ make UE5Editor-Linux-Debug
但是,这可能会对性能产生一定影响。
另一种方法是使用不同的 clang 版本(例如 3.8 或 4.0)。
运行时问题
如果编辑器未从菜单启动,或者某些功能不起作用,请在控制台中启动它并检查输出中的错误。
$ /opt/unreal-engine/Engine/Binaries/Linux/UnrealEditor
C++ 代码项目问题
创建代码项目后,新项目将打开为文本编辑器,而不是像应有的那样在 Unreal Editor 中打开。重新启动编辑器后,新项目会显示出来并可以打开,但在第一次运行时,它需要大约半小时才能编译,而且由于这是在后台(无 GUI)进行的,因此可能看起来没有在做任何事情。CPU 使用率应该显示它仍在编译,您可能想从控制台启动编辑器以查看进度。
如果在第一次在 UE 中打开项目时收到关于编辑器模块过时的消息,则需要在 IDE 中构建 UE5Editor 目标。不要中止此构建,否则将导致 Unreal Editor 损坏,需要重新安装 unreal-engine。之后,它会打开并要求您重建项目类,然后您就可以开始处理您的新项目了。
请注意,根据您的系统规格,完成这两次重建可能需要一个多小时。
引擎模块过时,无法在引擎运行时编译。请通过您的 IDE 进行构建
首先,在项目源代码文件夹中,检查 {nameofproject}.Target.cs 和 {nameofproject}Editor.Target.cs 在 base(Target) { ... } 部分是否包含 "DefaultBuildSettings = BuildSettingsVersion.V2;"。如果无效,请检查 Unreal Engine 源代码中的 Engine/Source/Developer/DesktopPlatform/Private/DesktopPlatformBase.cpp 文件,找到行 `Arguments += " -Progress -NoEngineChanges -NoHotReloadFromIDE";` 并删除最后两个选项:`Arguments += " -Progress";`
- 重新编译 Unreal Engine
- 启动您的项目并接受重建
禁用工具提示
UE4 的鼠标悬停工具提示可能渲染非常缓慢。可以通过在以下位置添加内容来禁用它们
Engine/Config/ConsoleVariables.ini
Slate.AllowToolTips=0
KDE 下随机冻结
在 KDE 文件搜索选项中禁用索引文件内容。
KDE 下工具提示渲染缓慢
Epic 建议为 Unreal Editor 启用合成功能,该功能默认是禁用的。来源:https://michaeljcole.github.io/wiki.unrealengine.com/Linux_Known_Issues/#KDE
多显示器配置下 Blueprint 窗口变为空白
要修复空白大窗口,请转到 *编辑 > 偏好设置 > 用户界面 > 启用窗口动画* 并激活复选框。
SDL: wayland 不可用
当尝试使用 SDL_VIDEODRIVER=wayland 环境变量强制编辑器在 Wayland 上运行时,编辑器会向某些用户显示此错误。此问题的原因尚不清楚,因此没有可靠的解决方案。设置 SDL_DYNAMIC_API=/usr/lib/libSDL2.so 实际上允许您在 Wayland 上运行编辑器,但一旦您将鼠标悬停在某些 UI 元素上,编辑器就会崩溃。
阴影闪烁、卡顿、随机崩溃
在 NVIDIA 驱动程序上使用 Vulkan 时,帧缓冲同步似乎存在严重问题。最简单的修复方法是运行在 `单线程模式,禁用并行渲染`。虽然不是理想的解决方案,但它提供了更稳定的体验,并修复了编辑器中的各种问题。
如果您遇到问题,请尝试像这样启动您的项目
$ /Path/To/Unreal/Engine/Binaries/Linux/UnrealEditor "/Path/To/YourProject/YourProject.uproject" -NoParallelRendering -onethread
附加内容
入门内容
StarterContent 项目已安装到 /opt/unreal-engine/Samples/StarterContent/StarterContent.uproject,您可以从启动器中浏览到它。
市场应用
带有 Unreal Marketplace 的启动器尚未在 Linux 上提供 [2],因此无法从 Linux 安装 ContentExamples 项目等应用 [3]。
可以通过 Windows(或 Mac)上的 启动器 下载市场应用,它们存储在 /ProgramData/Epic/EpicGamesLauncher/VaultCache 中。ProgramData 默认是隐藏的。
有几种选项可以在本地下载市场内容
- 使用 lutris 和 Epic Games Store 安装程序,通过禁用沙盒,您可以直接将内容添加到项目中。
- 使用来自 flathub 或 eam-gitAUR 的 Epic Asset Manager,它可以让您将资产下载到库中。
- 有一个用 JS 编写的 UE4 Marketplace Downloader 的实现。