Editor 中资源打包和真机加载流程

随着游戏内资源越来越多,包体越来越大,但移动端的包大小是有限制的,不能无限度地把所有的资源都打到基础包中,Android 上限是 2G(可以开启 Allow Large Obb files 以支持 4G),IOS 提交到 AppStore 的上限也是 4G,通常会保持 IOS/Android 基础包内的资源统一,其余的资源用热更或动态下载的形式更新到设备上。

所以,实际上在 开发阶段 打进基础包内的资源,只是工程中的一部分。经常无法满足策划、美术、测试同学的验证需要。

  1. 新的地图、资源想要在真机查看
  2. 包内资源有问题,提交后等待整包构建时间太久
  3. 基础包的资源量超标,可能无法添加新的资源

基于这种需求,在开发阶段,可以使用 基础包 + 补丁 的形式实现。

资源的打包

在我们当前的工程中,在编辑器中,可以直接在资源、目录上右键选择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
2
LogPakFile: Display: Found Pak file ../../../PROJECT_NAME/Saved/Paks/2022.10.18-13.02.53_IOS_001_P.pak attempting to mount.
LogPakFile: Display: Mounting pak file ../../../PROJECT_NAME/Saved/Paks/2022.10.18-13.02.53_IOS_001_P.pak.

有这样的 Log,就代表资源包被引擎读取成功,可以直接使用,就像它被打进了基础包中一样

注意事项

手动打包 Pak 的优先级高于基础包内的资源,意味着一个资源如果 补丁包 基础包 同时 存在,就会 替换 基础包内的,就像热更新逻辑。

  1. 不同平台的 pak 不能混用!
  2. 测试完毕之后要把设备上的 pak 文件删除,不然后面新打的包可能会出现资源表现错误。