打包项目

打包虚幻游戏项目以便进行发布。

Windows
MacOS
Linux

必须先对虚幻项目进行正确打包,之后才能将其发布给用户。打包能确保所有代码和内容都为最新且使用正确格式,以便在预期的目标平台上运行。

打包过程会涉及以下几个步骤。首先,所有项目特定的源代码会被编译。代码编译完成后,所有所需的内容都会被转化(或"烘培")成目标平台可以使用的格式。然后,编译后的代码和经过烘焙的内容将被打包成一组可发布的文件,例如安装程序。

在菜单栏的 文件(File) 菜单中,有一个名为 打包项目(Package Project) 的选项。该选项包含一个子菜单,其中列出了所有引擎能支持得平台,你可以为这些平台打包项目。

假如选择为Android设备打包,你就会看到多个选项。请参阅Android参考 页面获取更多信息。

在打包前,你还可以设置一些 高级(Advanced) 选项。

设置游戏的默认地图

打包游戏前,你首先需要设置 游戏默认地图,打包好的游戏会在启动时首先加载这张地图。假如你没有设置地图,并且使用的是空白项目,那么打包好的游戏在启动时只会显示一篇漆黑。假如你使用了某张模板地图,例如第一人称(First Person)模板或第三人称(Third Person)模板,那么就会加载启动地图。

若要设置游戏默认地图(Game Default Map),请在编辑器的主菜单栏中点击 编辑(Edit)> 项目设置(Project Settings)> 地图和 模式(Maps & Modes)

Project_Settings_MapsNModes.png

创建打包文件

若要为特定平台打包项目,请在编辑器的主菜单栏中点击 文件(File)> 打包项目(Package Project)> [平台名称(PlatformName)]

packaging_menu.png

packaging_menu_Mac.png

你会看到一个提示你选择目标路径的对话框。如果成功完成打包,则此目录将保存你的打包项目。

确认完目标路径后,你就可以开始为所选平台打包项目了。由于打包非常耗时,所以整个过程会在后台执行,你可以继续使用编辑器。编辑器右下角会显示一个状态指示器,提示你打包进度。

progress.png

progress_MAC.png

状态指示器还有一个"取消(Cancel)"按钮来停止打包过程。此外,"显示日志(Show Log)"链接可以用来显示额外的输出日志信息,假如你想找出打包的失败原因,或者捕捉可能揭示潜在漏洞的警告信息,这些日志会非常有用:

log.png

log_MAC.png

一些最重要的日志消息,例如错误和警告消息,都会输出到常规的消息日志(Message Log)窗口中: message_log.png

message_log.png

message_log_Mac.png

假如这些窗口没有显示,你只需点击 窗口(Window) > 开发者工具(Developer Tool) > 输出日志(Output Log) / 消息日志(Message Log) 来启用它们。

发布

假如你想将iOS或Android游戏发布到App Store或Google Play Store上,你就要用发布(Distribution)模式创建打包文件。为此,请点击 打包(Packaging) 菜单中的 打包设置(Packaging Settings) 选项,然后勾选 发布(Distribution) 复选框。

假如是iOS,你需要在Apple的开发人员网站上创建发布证书(Distribution Certificate)和移动设备配置(MobileProvision)。请以安装开发证书的方式安装发布证书,并以"Distro_"为前缀命名发布配置,紧接着命名另一个配置(因此你将同时拥有 `Distro_MyProject.mobileprovision` 和 `MyProject.mobileprovision`)。

假如是Android,你需要创建一个密钥来签署 .apk 文件,并使用名为 SigningConfig.xml 的文件向编译工具传递一些信息。该文件位于引擎的安装目录(Engine/Build/Android/Java/)中。假如你编辑了该文件,它就会影响你的所有项目。然而,你可以将该文件复制到项目的 Build/Android/ 目录(无 Java/ 子目录),这样它就只会影响该项目。你可以在该文件的内部找到关于如何生成密钥和填写文件的说明。

高级设置

在主菜单栏中点击 文件(File)> 打包项目(Package Project)> 打包设置...(Packaging Settings...),或者点击 编辑(Edit)> 项目设置(Project Settings)> 打包(Packaging),编辑器会显示一些和打包有关的高级配置选项。

settings.png

目前,它们包括:

选项

说明

编译配置(Build Configuration)

用于编辑基于代码的项目的编译配置。若要调试代码项目,请选择"调试游戏(DebugGame)"。对于大多数具有最低限度调试支持但性能更佳的其他开发,请选择开发(Development)。对于不含调试信息且不含调试导向性功能(例如绘制调试形状或打印屏幕上的调试消息)的最终发布版本,请选择发布(Shipping)。

注意,纯蓝图项目没有用于创建DebugGame编译的选项。

暂存目录(Staging Directory)

包含游戏打包后的版本的目录。当你在目标目录选择中选择另一个目录时,它将自动更新。

完整重编译(Full Rebuild)

是否应编译所有代码。如果禁用,则只编译修改过的代码。这可以加快打包过程。对于发布版本,你应该始终执行完整重编译,以确保没有任何内容丢失或过时。此选项默认为启用。

使用Pak文件(Use Pak File)

是否将项目的资源打包为单个文件或单个包。如果启用,所有资源将被放入单个.pak文件,而非复制所有单个文件(默认为启用)。如果你的项目使用大量资源文件,则使用Pak文件可以使发布变得更简单,因为它减少了需要传输的文件数量。此选项默认为禁用。

生成文件块(Generate Chunks)

是否生成可用于流送安装的.pak文件块。

编译HTTP文件块安装数据(Build Http Chunk Install Data)

是否为HTTP块安装文件生成数据。此配置允许在运行时安装将在Web服务器上托管的该数据。

Http数据块安装数据目录(Http Chunk Install Data Directory)

它表示数据在编译后的目标安装目录。

Http数据块安装数据版本(Http Chunk Install Data Version)

它表示HTTP数据块安装数据的版本名称。

Include Prerequisites Installer(包含先决条件安装文件)

它指定打包游戏是否包含先决条件的安装文件,例如可重新发布的操作系统组件。

签名和加密

随着虚幻引擎4.22的发布,我们为桌面平台(Windows、Mac和Linux)集成了行业标准OpenSSL 库。

当以发货产品的形式分发时,.Pak 文件可以签名或加密,通常是为了防止数据提取或篡改。要激活、停用或调整项目上的密码设置,请转到 项目设置(Project Settings) 菜单,找到 加密(Crypto) 部分。

CryptoSettings.png

项目设置(Project Settings) 菜单中的密码选项。

以下设置可用于该菜单:

选项

说明

加密Pak INI文件(Encrypt Pak INI Files)

对项目的 .pak 文件中所有 .ini 文件进行加密。这将以极小的运行时成本防止轻松挖掘或篡改产品的配置数据。

加密Pak索引(Encrypt Pak Index)

加密 .pak 文件索引,以极小的运行时成本防止UnrealPak打开、查看和解压缩你产品的 .pak 文件。

加密UAsset文件(Encrypt UAsset Files)

加密 .pak 文件中的 .uasset 文件。这些文件包含关于内部资源的标头信息,但不包含实际资源数据本身。加密这些数据为你的数据提供了额外的安全性,但是增加了少量运行时成本和数据熵,这会增加补丁的大小。

加密资源(Encrypt Assets)

完全加密 .pak 中的所有资源。

注意,此设置会对运行时文件I/O性能产生可度量的影响,并增加最终打包数据中的熵,从而降低分发补丁系统的效率。

启用Pak签名(Enable Pak Signing)

激活或禁用 .pak 文件签名。

此外,可以设置或清除用于签名或加密的密钥。

内容烘焙

作为一名开发人员,在迭代新的或修改过的游戏内容时,你可能并不总是希望经历将所有内容都打包到Staging Directory并从此处运行的漫长过程。因此,只需点击 文件(File)> 烘焙内容(Cook Content)> [平台名称(PlatformName)],即可为特定目标平台烘焙内容,而无需打包。

注意,该功能将更新项目本地开发人员工作区中的内容,并且不会将任何资源复制到暂存目录。你可以直接从本地开发人员工作区运行游戏,以实现快速迭代。

优化加载时间

较短的加载时间对于开放世界场景游戏而言至关重要,而且对于任何类型的游戏来说也非常重要。虚幻引擎提供了几种方法来优化项目在打包过程中的加载时间。以下是缩短游戏加载时间的一些推荐做法。有关如何打包项目的信息,请参阅打包和烘焙游戏 部分。

使用事件驱动加载器(Event Driven Loader,EDL)和异步加载线程(Asynchronous Loading Thread,ALT)

  • 默认情况下,异步加载线程(Asynchronous Loading Thread)(ALT)是关闭的,但是可以在引擎(Engine)>流送(Streaming)部分下的项目设置(Project Settings)菜单中打开。对于修改过的引擎,可能需要进行一些调整,但一般来说,ALT应该会将加载速度提高一倍,包括具有"预先"加载时间的游戏和持续流送数据的游戏。ALT的工作方式是在两个独立的线程上同时运行序列化和后加载代码,因此,它增加了一项要求,即游戏代码中的"UObject"类构造函数、"PostInitProperties"函数和"Serialize"函数必须具有线程安全性。激活ALT后,ALT会将加载速度提高一倍。有关使用异步加载方法(在C++中)的更多信息,请参阅异步资源加载 页面。

  • 默认情况下激活 事件驱动加载程序(Event-Driven Loader),但是可以在"引擎(Engine)>流送(Streaming)"部分下的"项目设置(Project Settings)"菜单中禁用。对于大多数项目,EDL会将加载时间减半。EDL是稳定的,可以向后移植到旧版本的虚幻引擎,也可以针对修改过或自定义的引擎版本进行调整。

EngineStreamingSettings.png

压缩.pak文件

  • 要在项目中使用 .pak 文件压缩,打开"项目设置(Project Settings)"并找到"打包(Packaging)"部分。在此部分,打开"打包(Packaging)"标题的高级部分,并选中出现的标有"创建压缩烘焙包(Create compressed cooked packages)"的复选框。

  • 大多数平台不提供自动压缩,且压缩你的 .pak 文件将减少加载时间,但有一些特殊情况需要考虑:

平台

建议

Sony PlayStation 4

压缩自动应用于每个PlayStation 4标题,因此压缩 .pak 文件是多余的,还会导致加载时间变长,而不会减小文件大小。因此不建议为PlayStation 4版本压缩 .pak 文件。

Nintendo Switch

。由于需要时间让处理器解压数据,Switch上的 .pak 压缩文件有时会加载得更慢,但有时从压缩文件加载会更快。对于Switch标题,建议是测试每个标题的加载时间,然后根据具体情况再做决定。

Microsoft XBoxOne

在XBoxOne平台上,压缩对于实现尽可能快的加载时间至关重要。

Steam

Steam在用户下载文件时压缩文件,所以初始下载时间不会受到游戏正在压缩的.pak文件的影响。然而,Steam的差分补丁系统在未压缩文件时会运行得更好。压缩的.pak文件可以节省在客户系统上的空间,但是在打补丁时需要更长的时间来下载。

Oculus

不启用 .pak 文件的压缩。Oculus补丁系统无法正确处理压缩后的 .pak 文件。此外,压缩 .pak 文件也不会减小文件大小。

Project Settings - Compress Pak option

选中此框以启用.pak文件中的压缩。

对pak文件排序

井井有条的 .pak 文件对于减少加载时间至关重要。为了帮助你以最佳方式对 .pak 文件进行排序,UE4提供了一组工具来发现所需数据资源的顺序,并编译更快加载的包。从概念上讲,此过程类似于基于配置文件的优化。按照该方法对我们的 .pak 文件进行排序:

  1. 使用命令行选项 -fileopenlog 编译并运行打包游戏,这将导致引擎记录打开文件的顺序。

  2. 练习游戏的所有主要方面。加载每个关卡、每个可操作角色、每个武器、每个载具等等。加载所有内容后,退出游戏。

  3. 在部署的文件中,将有一个名为"GameOpenOrder.log"的文件,其中包含优化.pak文件顺序所需的信息。例如,在Windows各版本上,你将在"WindowsNoEditor/(YourGame)/Build/WindowsNoEditor/FileOpenOrder/"中找到该文件。将该文件复制到开发目录"/Build/WindowsNoEditor/FileOpenOrder/"路径。

    在部署的文件中,将有一个名为"GameOpenOrder.log"的文件,其中包含优化.pak文件顺序所需的信息。例如,在Mac版本上,你将在"MacNoEditor/(YourGame)/Build/WindowsNoEditor/FileOpenOrder/"中找到该文件。将该文件复制到开发目录"/Build/MacNoEditor/FileOpenOrder/"路径。

  4. 日志文件就绪后,重新编译 .pak 文件。该 .pak 和未来生成的所有 .pak 文件都将使用日志文件中规定的文件顺序。

在生产环境中,日志文件应该检入源码控制,并定期更新新的 -fileopenlog 运行结果,包括游戏准备发行时的最后一次运行。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback