Choose your operating system:
Windows
macOS
Linux
无论UE4项目针对的是哪个平台,缩减游戏包容量都颇具挑战性。以下指南将说明如何利用UE4编辑器中的工具来把最终项目包尽量缩小。
新建一个空白项目
开始着手基于Android的移动项目时,使用者可能会尝试使用现有项目作为基础,或创建启用了"初学者内容包"的新项目。请勿如此进行操作,应改为创建基于C++或 蓝图 的全新空白项目,然后使用
压缩已烘焙内容
削减APK包容量最简单快捷的方法是告知UE4在打包过程中对APK包进行压缩。在UE4编辑器中完成下列操作即可开启包压缩。
-
首先前往主工具栏并选择 编辑(Edit) 选项,然后选择 项目设置(Project Settings) ,打开项目设置。
-
在"项目(Project)"部分下单击 打包(Packaging) ,显示项目打包方式的选项。
-
单击位于"打包(Packaging)"设置底部的白色小三角形,显示 高级项目设置(Advanced Project settings) 。
-
查找标记为 创建压缩烘焙包(Create compressed cooked packages) 的选项并将其启用(如未启用)。
如果未曾在启用"创建压缩烘焙包(Create compressed cooked packages)"勾选框的情况下打包游戏,在启用此项并重新打包项目后文件包将存在非常明显的大小差异。实际上,启用"创建压缩烘焙包(Create compressed cooked packages)"后,项目APK包的容量通常会削减50%左右。
共享材质着色器和库
启用 共享材质着色器代码(Share Material Shader Code) 和 共享材质本地库(Share Material Native Libraries) 有助于削减项目包的容量,但会导致加载时间增加。执行以下操作即可在UE4项目中启用该选项:
-
首先前往 主工具栏 上的 编辑(Edit) > 项目设置(Project Settings) 。
-
在 打包(Packing) 部分底部启用以下两个勾选框。
-
共享材质着色器代码(Share Material Shader Code)
-
共享材质本地库(Shared Material Native Libraries)
-
排除编辑器内容
启用此选项后,UE4编辑器使用的内容都不会打包进项目中。须注意,启用此选项后可能导致问题:使用编辑器内容的项目出现内容缺失。执行以下操作即可在UE4项目中启用这两个选项:
-
首先前往 主工具栏 上的 编辑(Edit) > 项目设置(Project Settings) 。
-
在"项目(Project)"部分下单击 打包(Packaging) ,显示项目打包方式的选项。
-
单击位于"打包(Packaging)"设置底部的白色小三角形,显示 高级项目设置(Advanced Project settings) 。
-
向下滚动,使 烘焙时排除编辑器内容(Exclude editor content when cooking) 选项出现,点击旁边的勾选框将其启用。
启用此项后可能引起问题:使用编辑器内容的项目可能出现内容缺失。
设置项目的关卡
经常被忽略的是,未正确设置项目选项(如默认情况下应该使用哪些关卡、或者关卡过渡之间应该使用哪些关卡)会导致项目APK包容量激增。执行以下步骤设置用于此类交互的关卡。
-
首先前往 主工具栏 上的 编辑(Edit) > 项目设置(Project Settings) 。
-
然后在 贴图与模式(Maps & Modes) 部分中的 项目(Project) 下查找 默认贴图(Default Maps) 部分。
-
点击 游戏默认地图(Game Default Map) 旁边的箭头,从 资源列表 中选择应该用作游戏默认初始关卡的地图。
-
重复此进程,直到拥有每种必需地图类型的关卡输入。
选择要打包和不打包的内容
在项目设置的"打包(Packaging)"部分中指定哪些内容应被打包到游戏中,哪些内容不应被打包到游戏中。如要指定项目中应包含的地图,应执行以下操作:
如未指定应烘焙的地图,则所有地图都将被烘焙(包括可能拥有的测试地图)。如未指定应烘焙的项目,游戏包的最终大小将比实际更大。
-
首先前往 主工具栏 选择 编辑(Edit) > 项目设置(Project Settings) 来打开项目设置。
-
然后在 打包(Packaging) 部分中的 项目(Project) 下查找 打包(Packaging) 选项。
-
单击位于"打包(Packaging)"部分底部的 白色小三角形 ,显示高级打包设置。
-
滚动到"高级打包(Advanced Packaging)"选项的下部,直到 烘焙项目内容目录中的所有内容(无视下方的地图列表)Cook everything in the project content directory(ignores list of maps below) 选项的勾选框出现。此处显示的选项可用于指定哪些内容和地图应被打包到项目中,哪些不应被打包到项目中。
-
按下要使用的选项旁边的白色 加号 来新建条目,即可包含或排除资源。
-
接着点击新添加条目旁边的三个白色小点,从出现的窗口中选择版本中要包含或排除的资源。
-
选择资源后,条目框将包含资源所在项目文件夹的路径。
属性名称 |
描述 |
|
---|---|---|
烘焙项目内容目录中的所有内容 (无视下方的地图列表) |
烘焙项目内容目录中的所有内容。 |
|
仅烘焙地图 (这只影响"烘焙所有")。 |
仅烘焙地图(这只影响"烘焙所有"标签)。 |
|
创建压缩烘焙包 |
创建压缩烘焙包 (削减部署大小)。 |
|
如果此包中不包含编辑器内容,使用此内容时游戏可能会崩溃/出错 |
跳过编辑器内容的烘焙。 |
|
打包版本中包含的地图列表 |
命令行上未指定其他地图列表时应包含的地图列表。 |
|
要烘焙的额外资源目录 |
列出了应固定被烘焙的、包含.uasset文件的额外目录,无论其是否受项目中的内容所引用。注意:这些路径相对于项目的Content目录。 |
|
永不烘焙的目录 |
列出了永不会烘焙的目录。 |
|
将额外的非资源目录添加到包 |
列出了包含应固定被添加到.pak文件的文件目录(前提条件是使用.pak文件;否则其将作为单个文件进行复制)。这用于传输通过UFS(虚幻文件系统)文件IO API手动加载的额外文件。注意:这些路径相对于项目的Content目录。 |
|
要复制的额外非资源目录 |
列出了包含打包项目时应固定被复制、但不作为.pak文件一部分的文件目录。这用于传输手动加载的额外文件,而不使用UFS(虚幻文件系统)文件IP API(如执行其自身内部文件IO的第三方库)。 注意:这些路径相对于项目的Content目录。 |
检查将要烘焙的内容
要确保只将项目相关的内容添加到APK文件中,可查看项目中的
Cooked
文件夹,检查哪些内容正被添加到项目APK中。前往
(ProjectName)\Saved\Cooked
,然后选择您烘焙项目所用格式的文件夹,找到Cooked文件夹。
请注意:只有在完成首次烘焙之后才能查看 Cooked 文件夹中的内容。
下图显示的是Match 3样本游戏中的Texture文件夹。此文件夹中的内容已按大小排序,很容易分辨资源的大小。找到容量最大的资源之后,便可在UE4中对其进行检查,确定其大小是否能在保证资源完整性的前提下被实际缩减。
开发和发布版本容量
尝试确定项目的最终大小时须注意,项目的开发版本将略大于发布版本。在Medieval Match游戏范例中,开发版本与发布版本之间的容量差异约为14%。但各个项目的要求有所相同,因此两个不同项目版本之间的容量差异可能大于14%,也可能小于此值。
逐设备纹理LOD
在虚幻引擎4.8版本中可以指定在特定设备上使用的特定纹理大小。 移动平台纹理指南 对此另有详述。
移除未使用的内容
当项目最终准备好进行打包上架时,必须在内容浏览器中选中并删除未使用的内容或测试内容。删除方法是先选中所要删除的内容,然后按键盘上的Delete键,或使用右键菜单中的"删除"选项。尝试从项目中删除内容时,系统将显示删除资源(Delete Assets)菜单,如下图所示。
这是在UE4中删除对象的首选方法,不应直接从Content文件夹中删除/移除资源。
"删除资源(Delete Assets)"菜单将指出尝试删除的资源是否被另一资源引用。如果该资源未被引用,那么可直接将其删除;但如果该资源已被其他资源引用,则可使用 替换引用(Replace References) 选项将对该资源的引用替换为应打包到项目中的另一个资源。
移除未使用的插件
在UE4编辑器中禁用所有未使用 插件 也能将非必要内容和代码排除在项目最终的APK包之外。这是因为部分 插件 需要特定的一组基础资源和代码才能正常工作。如果不禁用 插件 ,就不会从项目中移除使 插件 正常工作的必需资源和代码。虽然这种方式所削减的容量不如缩小或移除大型纹理一样直观,但在尽量缩小容量时(例如将游戏容量控制在100 MB内),每种方法皆能发挥作用。如要在UE4中禁用插件,需完成下列步骤:
务必对项目进行完整测试,确保禁用 插件 后项目的功能不受干扰。
-
首先前往 主工具栏 并单击 窗口(Window) 选项,然后选择 插件(Plug-in) 选项,打开插件管理器。
-
在 插件 浏览器中选择不同部分,取消勾选 已启用(Enabled) 旁边的复选框来禁用未使用的 插件 。 禁用所有 插件 之后需要重新启动UE4编辑器,然后重新打包项目。
打包黑名单
在现版本中,使用者可以将一个文本文件放置在项目的 Build/Platform/(目标平台文件夹) 目录中,指示烘焙器将部分或完整文件路径排除在项目打包之外。项目可以有多个分别用于调试、开发、测试和发布版本的黑名单文件。对其进行设置即可包括/排除任意项目数据。甚至可以针对项目所支持的各个平台使用不同的黑名单文件,例如针对Android使用一个黑名单文件,针对iOS使用另一个,以此类推。 下例是Android上Match 3的黑名单文件。
以Match 3为例,烘焙器得到的指令是在游戏烘焙和打包时不包含以下文件。
-
黑名单文本文件的位置与名称: Match3/Build/Android/ PakBlacklist-Shipping.txt :
前三个条目应适用于任意项目,但某些情况下在运行时可能需要 AssetRegistry.bin (具体取决于项目)。强烈建议进行完整测试,确保移除的内容不会对项目产生负面影响。进行此检查的一个简单方法是打开项目的所有关卡,确保其正确加载,未出现错误或警告。如果遇到问题但不清除原因,请检查 Logcat 。
最大可移动聚光源/点光源数
最大可移动聚光源/点光源数 属性有助于减少针对动态光源生成的着色器数量。此功能尤其适用于不需要动态光照的移动平台游戏。你可以在 项目设置 下 减少移动着色器数组 的 渲染 分段中可找到它。
将 最大可移动聚光源/点光源数 从4设为0,弹出提示后重启UE4编辑器即可完全禁用此功能。
节约的容量不等,具体取决于项目的容量和使用的材质数量。举例而言,使用默认的第三人称模板即可找出"最大动态点光源数(Max Dynamic Point Lights)"启用和禁用时的容量差异。
状态 |
游戏包容量 |
缩减量 |
---|---|---|
开启 |
54.3 MB |
0 |
关闭 |
53.2 MB |
1.1 MB |
用隐藏符号进行编译
可按默认产生较小.so文件的条件对发布配置(带隐藏可视性)进行编译。然而,这将同时移除用于显示调用堆栈转存的符号,对崩溃进行调试的能力会因此而受限。要在UE4项目中启用此选项,需要执行以下操作:
-
首先前往主工具栏并选择 编辑(Edit) 选项,然后选择 项目设置(Project Settings) ,打开项目设置。
-
之后前往 平台(Platforms) > Android > 高级编译(Advanced Build) ,点击勾选框启用"在发布配置中带隐藏符号显示编译(Build with hidden symbol visibility in shipping config)"。