为移动平台开发游戏时最常见的需求之一是确保游戏的下载大小和移动设备上的存储大小。虚幻引擎 5 可以进行调整以显著减少包体大小。本文列出了一些可以实施以减少游戏大小的程序。
出于本文的目的,我们将使用Cropout 示例项目。这是一款跨平台游戏,也适用于移动设备。 https://www.unrealengine.com/marketplace/en-US/product/cropout-sample-project
空包体
下载大小:75.1 MB
存储大小:196 MB
虚幻引擎 5.4 上的一个空白项目打包,部署到 Android(ASTC 压缩),最终下载大小为 75.1MB,在 Android 设备上的存储大小为 196MB。我们可以进一步减少这个大小。
Cropout 示例项目的开发包
下载大小:218 MB
存储大小:662 MB
在创建 Cropout 示例项目的开发包时,我们最终得到 281MB 的下载大小和 662MB 的存储大小。开发包有额外的库,这会增加包的大小。顾名思义,开发包仅用于调试目的,在发布游戏时绝不能使用。
搭载多种 (ASTC/DXT/ETC2) 的包
下载大小:169 MB
存储大小:319 MB
ASTC(自适应可扩展纹理压缩)、DXT(DirectX 纹理压缩)和 ETC2(Ericsson 纹理压缩 2)都是纹理压缩格式,它们可以减少纹理占用的内存,从而实现更好的性能和更低的存储要求,同时不会显著影响视觉质量。在制作打包时,开发者倾向于选择所有的纹理压缩格式,以支持最广泛的 Android 设备。
这有点过头了。选择所有可用的压缩格式将对游戏纹理进行三次烘焙和打包(每种格式一次),并使包体大小变得相当大。
使用 ASTC 进行打包
下载大小:135 MB
存储大小:284 MB
最好不要选择所有三种纹理压缩选项,而是每种压缩格式都打包一个版本,并根据游戏的目标硬件分发二进制文件。通过 Google Play 分发游戏时可以使用此选项。
根据Android 开发者指南,超过 80%(支持 Google Play)的 Android 设备支持 ASTC 格式,超过 95% 的设备支持 ETC2 格式。在仅为 ASTC 格式打包时,我们将包体大小从 169 MB 减少到 135 MB。存储空间也从 319 MB 减少到 284 MB。
前向着色与延迟着色
下载大小:132 MB
存储大小:281 MB
当谈到打包尺寸优化时,有几个注意事项。Cropout 的默认着色设置是延迟的。
选择前向着色具有多种优势,例如在低端设备上性能更佳、内存和功耗更低,以及支持 MSAA(可提高视觉质量)。然而,它在处理复杂照明场景和多个动态光源方面存在局限性,这可能导致照明效果不够逼真。
另一方面,延迟着色允许使用更先进的照明技术并高效处理许多动态光源,从而提供更高质量的视觉效果。但代价是更高的 GPU 和内存使用率,这可能会对移动设备的性能和电池寿命产生负面影响。
根据游戏的光照、目标设备和性能选择,您可以选择前向着色或延迟着色。也就是说,选择前向着色时,尺寸会减小。
删除不需要的插件
下载大小:131 MB
存储大小:276 MB
插件会影响包体大小(只要它们不是编辑器插件)。如果目标平台仅为移动平台,则可以从默认启用的插件中删除几个插件,以减少包体大小。
有多个插件是引擎本身运行的核心,因此移除插件需要进行额外操作。只有当你非常确定插件不会破坏游戏本身时才禁用它们。不要禁用 Oodle 插件,因为它们有助于减少包体大小!
Cropout 示例项目在这方面进行了相当优化。无论如何,您仍然可以删除一些不需要的插件以进一步减少构建大小。
删除未使用的引擎组件
下载大小:128 MB
存储大小:273 MB
有时,游戏不使用默认引擎资产,这也会增加包体大小。您可以单独选择这些资产,并告诉虚幻引擎不要将它们打包。要了解这些引擎资产是什么,您需要提取包体本身。操作方法如下:
提取 .obb 文件
生成的 .apk 和 .obb 文件只是存档文件,可以使用 7zip 提取。提取后,如果项目设置中的 IOStore 选项已打开,您会注意到“.ucas”和“.utoc”文件以及“.pak”文件。
UnrealPak.exe 用于提取 .ucas
.ucas 文件包含游戏加载的资源,可以使用 /Engine/Binaries/Win64 文件夹中的“UnreakPak.exe”实用程序进一步提取。通过从命令行调用此实用程序,您可以查看 .ucas 文件包含的内容。
在解压的文件夹中,除了包含专门为此游戏添加的游戏资产的 CropoutSample 文件夹外,还有一个 Engine 文件夹,其中包含引擎本身自动添加的资产。引擎需要其中许多资产才能正常运行。同时,如果您认为有些资产没有用处,可以从包体中排除它们。
要从引擎中排除特定资产,您必须使用“DefaultPakFileRules.ini”
默认PakFileRules.ini
在项目的“Config”文件夹中创建一个新的文本文件。将其重命名为“DefaultPakFileRules.ini”。在此 ini 文件中,您可以添加规则以排除某些资产,包括引擎资产。
下面是 ini 文件内容的示例。
默认PakFileRules.ini
近期焦点