随着游戏内资源越来越多,包体越来越大,但移动端的包大小是有限制的,不能无限度地把所有的资源都打到基础包中,Android 上限是 2G(可以开启 Allow Large Obb files
以支持 4G),IOS 提交到 AppStore 的上限也是 4G,通常会保持 IOS/Android 基础包内的资源统一,其余的资源用热更或动态下载的形式更新到设备上。
所以,实际上在 开发阶段 打进基础包内的资源,只是工程中的一部分。经常无法满足策划、美术、测试同学的验证需要。
- 新的地图、资源想要在真机查看
- 包内资源有问题,提交后等待整包构建时间太久
- 基础包的资源量超标,可能无法添加新的资源
基于这种需求,在开发阶段,可以使用 基础包 + 补丁 的形式实现。
资源的打包
在我们当前的工程中,在编辑器中,可以直接在资源、目录上右键选择Cook And Pak Actions,选择对应的平台,以及选择AnalysisDependencies(分析依赖)。
不同平台的包需要选择的不一样(根据自己项目实际情况选择):
- 安卓:Android_ASTC
- IOS:IOS
- PCVersion:WindowsNoEditor
执行之后右下角会有执行提示:
需要等待执行完毕,这个过程不会卡住编辑器,可以做其他的编辑操作。
执行的耗时取决于引用的资源量,以及所选择的资源之前有没有执行过打包(DDC)。
执行完毕之后,会在项目的 Saved/HotPatcher/Paks/{EXECUTE_TIME}/Android_ASTC
下面创建出一个对应的 .pak 文件,这个 pak 文件就是打包资源的补丁包,文件名中包含了平台名,不同平台的 pak 文件 不能混用。
放入真机中
PCVersion
PCVersion 需要将这个 Pak 文件放到以下目录中:
1 | WindowsNoEditor\PROJECT_NAME\Content\Paks |
若不存在 Paks 目录,可手动创建。
Android
在 Android 中,需要将这个 pak 文件放到下面目录中:
1 | UE4Game/PROJECT_NAME/PROJECT_NAME/Saved/Paks |
如果修改了数据目录到沙盒路径,则是这个路径:
1 | Android/data/com.xxxx.yyyy/files/UE4Game/PROJECT_NAME/PROJECT_NAME/Saved/Paks |
如果没有 Paks 目录,可以手动创建一个。
IOS
IOS 则要复杂一些,需要用 爱思助手 或iMaZing等 IOS 管理工具传递文件。
放入 文稿 - PROJECT_NAME - Saved - Paks 下,若不存在 Paks 目录,可手动创建。
检查挂载情况
当将 pak 文件放入上述目录之后,就可以启动游戏了。
如果为了确认 pak 文件是否生效,可以从 Log 中查看:
1 | LogPakFile: Display: Found Pak file ../../../PROJECT_NAME/Saved/Paks/2022.10.18-13.02.53_IOS_001_P.pak attempting to mount. |
有这样的 Log,就代表资源包被引擎读取成功,可以直接使用,就像它被打进了基础包中一样。
注意事项
手动打包 Pak 的优先级高于基础包内的资源,意味着一个资源如果 补丁包 和基础包 中同时 存在,就会 替换 基础包内的,就像热更新逻辑。
- 不同平台的 pak 不能混用!
- 测试完毕之后要把设备上的 pak 文件删除,不然后面新打的包可能会出现资源表现错误。