AirSim/Cosys-AirSim 游戏开发(三)打包可执行文件
之前两篇博客介绍了如何在 AirSim 中使用自定义的场景并在 UE Editor 中运行,但这种方式其实生成的是 Debug 版,包含了很多调试使用的符号连接,在后面追求性能的时候会成为瓶颈,这篇博客介绍如何将第二篇博客中使用的场景编译成 Shipping。
- AirSim/Cosys-AirSim 游戏开发(二)使用自定义场景
下表介绍了 UE 三个常见版本之间的区别:
特性 | Development | Release | Shipping |
---|---|---|---|
含调试信息(符号) | ✅ | ✅(部分) | ❌ |
控制台命令 | ✅ | ✅ | ❌(受限) |
日志输出 | 全部 | 大部分 | 很少 |
运行效率 | 普通 | 高 | 最高 |
安全性(防逆向) | 低 | 中 | 高 |
崩溃报告 | 有 | 有 | 有 |
适合发布 | ❌ | 内部测试用 | ✅ |
总体来说 AirSim 打包发版流程就是 UE 的发版流程,因为 AirSim 是作为 UE 插件添加进来的,因此在打包过程中遇到的所有问题都是 UE 的打包问题。
1. 添加地图和AirSim资源
在上方工具栏中点击 Edit
,弹出的窗口中点击 Project Settings...
按钮进入项目配置界面:
在弹出的界面中依次执行以下操作:
- 在左侧标签栏中找到
Project
标签,点击Packing
进入打包界面; - 下拉找到
List of maps to include in a packaged build
这一条; - 点击左侧的
+
添加条目,然后点击...
从文件中浏览;
在弹出的窗口中找到当前环境使用的 Demo_Enviroment.umap
文件,如果你之前和我的操作步骤一样,那么这个文件在你的工程的 MyProject\Content\Downtown_West\Maps
文件夹中:
再重复上面的第3步,添加 AirSimAssets.umap
文件,我们在之前已经 AirSim 包拷贝到项目工程的 Plugins 文件夹中,这个文件就在 MyProject\Plugins\AirSim\Content
位置:
最终成品如下:
2. 配置打包模式
仍然是在刚才的窗口中,往下拉一点可以看到 Build Configuration
条目,在旁边的下拉框中选择 Shipping
:
3. [视情况而定] 配置 DirectX 版本
其实到上面那一步就可以直接进行发版了,通常情况下不需要额外配置 DirectX 版本,但如果你在打包结束后发现有下面的报错则说明你的电脑没有安装对应的版本或者驱动需要更新:
LowLevelFatalError [File:D:\build\++UE5\Sync\Engine\Source\Runtime\D3D12RHI\Private\D3D12Util.cpp]
还是在第二部的项目配置界面,在左侧找到 Platforms
标签,按照下面的步骤操作:
- 找到
Windows
并点击进入配置界面; - 找到
Target RHIs
中的Default RHI
在旁白的下拉菜单中选择一个合适的版本;
【Note】:这个 DirectX 版本是根据的显卡驱动和系统文件决定的,可以通过任务管理器在显卡那个界面中找到对应的版本。
打开任务管理器找到显卡,可以看见我这里安装的是 DirectX 12
,那么在上面的选项中就选择 12 把版本。
【Note】:我发现如果选择 DirectX 11
编译也不会报错,但如果使用 DirectX 12
编译运行后有一定概率报错,如果你在12版本怎么编译都有上面的报错可以选择11重新编译,通常向下兼容问题不大。
执行完上面的操作记得 Ctrl
+ S
保存一下。
4. 配置 Shipping 编译
关闭项目配置窗口,然后按照下面的步骤操作:
- 在上方工具栏中找到
Platform
并打开下拉菜单; - 进入
Windows
子菜单; - 勾选
Shipping
选项; - 点击
Package Project
按钮,会弹出一个窗口让你选择打包文件存放位置,建议新建一个文件夹;
我将打包文件放在了工程目录下新建的 Package
文件夹中。
然后就是等待打包结束,根据电脑配置打包时间会在 10~30 min 不等,打包过程中你的 CPU 占用率基本是满的。
5. 运行 exe 文件
在打包结束且没有报错的情况下进入 MyProject\Package\Windows
文件夹中找到MyProject.exe
双击运行:
然后你就可以看见场景中的无人机了,第一次运行通常比较慢,后面再运行的话就会快很多:
如果运行后报下面的错则需要回到步骤 3 重新选择 DirectX 版本:
LowLevelFatalError [File:D:\build\++UE5\Sync\Engine\Source\Runtime\D3D12RHI\Private\D3D12Util.cpp]
如果你已经链接 XBox 游戏手柄也可以直接试试,AirSim 中默认的操作逻辑如下:
- 左侧遥感前后控制高度;左侧遥感左右控制旋转;
- 右侧遥感前后控制前进倒退;右侧遥感左右控制平移;
6. [可选] 编译窗口模式
有时候你不希望一下打开全屏模式,而是以窗口模式运行软件,那么需要在 已经编译好的前提下 修改一处配置文件。
【Note】:我也不知道为什么 UE 不能直接在 Eidtor 中修改,如果有人知道如何直接在 Editor 中修改还请在评论区留言。
进入你的项目工程中的 MyProject/Config
文件夹,编辑文件 DefaultGameUserSettings.ini
,如果没有直接新建:
在该文件中填入以下内容:
[/Script/Engine.GameUserSettings]
bUseVSync=False
ResolutionSizeX=1080
ResolutionSizeY=720
LastUserConfirmedResolutionSizeX=1080
LastUserConfirmedResolutionSizeY=720
WindowPosX=-1
WindowPosY=-1
FullscreenMode=2
LastConfirmedFullscreenMode=2
Version=5
PreferredFullscreenMode=2
然后重复执行步骤 4 重新编译即可。