Unity一般打包流程
通常打包流程主要是通过 Building setting
来选择需要打包的场景后出包到指定文件夹位置,也可以采用 [MenuItem("MyMenu/Do Something")]
中使用static函数来选择打包路径和打包方式——需要将该脚本放置在 Editor
文件夹下
[MenuItem("Test/BuildAndroid")]
public static void BuildAndroid() {
string path = Path.GetFullPath("D:\\Packages") + "/Backbag" + ".apk";
BuildPipeline.BuildPlayer(GetBuildScence(), path, BuildTarget.Android, BuildOptions.None);
}
命令行控制
- Launching Unity
- 首先我们需要在
Unity.exe
所在目录下执行 - 选择对应Option
命令语句解释
命令语句 | 解释 |
---|---|
-batchmode | 以批处理模式运行 Unity。在批处理模式下,Unity 无需人为操作即可运行命令行参数。它还抑制了部分弹出窗口(例如“保存场景”窗口);但是,Unity 编辑器本身会照常打开。使用命令行参数时,您应该始终以批处理模式运行 Unity,因为它允许自动化不间断地运行 |
-quit | 其他命令执行完毕后将退出Unity编辑器。但会导致错误消息被隐藏(显示在Editor.log文件) |
-executeMethod <ClassName.MethodName> | Unity 打开项目后立即执行静态方法,并在可选的资产服务器更新完成后执行。执行方法所在脚本必须在Editor文件中而且是static的。要从命令行进程返回错误,要么抛出异常导致 Unity 退出并返回代码 1,要么调用 EditorApplication.Exit 并返回非零代码 |
此外Unity Standalone Player平台中也能执行一些参数(官方文档中指Mac、Windows和Linux)
要在从命令行以批处理模式启动输入 PATH_TO_STANDALONE_BUILD -projectPath PROJECT_PATH -batchMode
比如 C:\projects\myproject\builds\myproject.exe
-batchMode
命令语句 | 解释 |
---|---|
-batchmode | 在"headless"模式下运行游戏。游戏将不显示任何内容,或接受用户输入。主要作用于网络游戏的服务器 |
-single-instance (Linux and Windows only) | 同一时候只允许一个游戏实例运行。如果另一个实例已在运行,然后再次通过 -single-instance启动它的话会调节到现有的这个实例 |
-force-(…) | 强制性的使用规定的渲染方式(DirectX 、Metal、OpenGL等 ) |
-screen-(…) | 重新规定屏幕的大小或者是出现方式(弹窗或全屏) |
Player Setting——PC
Player Settings提供了各种选项来帮助你完成最终游戏的出包,虽然说有很多不同的平台,但是大体上的设置会分为以下几个部分
Icon
图标,在桌面上显示的默认图标
Resolution and Presentation
分辨率和启动前窗口设置,包括了支持的分辨率比例和是否默认全屏启动等选项;
Resolution
- Fullscreen Mode : 选择默认窗口模式
- Default Is Native Resolution : 是游戏以默认的分辨率启动,取消勾选后可以强制游戏的分辨率。但是有一点,如果你的游戏已经打包启动过了,那下次再打包强制分辨率就没有意义了,因为Windows会将该应用最后的分辨率记录到注册表中。此时有三种解决方案:
- 1.改变应用的名称或公司;
- 2.在代码中直接控制分辨率;
- 3.使用Unity自带的启动前分辨率设置小窗口。
- Mac Retina Support:可以使游戏在Mac高DPI的屏幕上显示的更加清晰,但是可能会占用更多的资源;
- Run in background:在游戏失去焦点时仍旧继续运行不会暂停,联网游戏肯定要勾选;
Standalone Player Options
此部分允许指定用户如何自定义屏幕。 例如可以在此处确定用户是否可以调整屏幕大小以及可以并发运行多少个实例。
- Capture Single Screen: 启用此选项可确保全屏模式下的独立游戏不会使多显示器设置中的辅助显示器变暗。
- Use Player Log: 将所有Debug.Log的信息输入到一个log文件中,默认勾选
- Resizable Window: 允许玩家可以重新调整游戏窗口的大小;
- Visible in Background: 即使在后台任然能正常显示
- Force Single Instance : 一台主机只能由一个运行实例
- Supported Aspect Ratios: 支持的纵横比
Splash Image
初始图象,设置允许为独立平台指定启动图像
Other Setting
Rendering
- **Color Space:**颜色空间,很重要的选项,手机上只能选择Gamma,而一般3A大作都是Linear,Linear显示效果更加真实
- Auto Graphics API for Windows/ Mac/ Linux: 自动选择最佳的图形API,如果不勾选,可以自行添加支持的图形API
- Static Batching: 静态批处理。——将静态(非移动)游戏对象组合成大网格,并以更快的方式渲染它们
- Dynamic Batching:动态批处理,自动化Unity进程,一次性批量化渲染多个网络以优化图形性能,该技术转换 CPU 上的所有 GameObject 顶点并将许多相似的顶点组合在一起。 (当可编程渲染管线处于活动状态时,动态批处理没有效果)
- GPU Skinning / Compute Skinning : 使用GPU处理骨骼与皮肤联系的过程,释放CPU资源
- Graphics Jobs : 可以使游戏将一些渲染任务交给其他CPU核心进行处理,增加游戏的处理效率
- Frame Timing Stats: 帧时序状态。启用此属性以收集 CPU 和 GPU 帧时间统计信息。 将其与动态分辨率相机设置一起使用以确定您的应用程序是 CPU 还是 GPU 受限。
Configuration(配置)
- Scripting Backend: 选择项目中编译和执行 C# 代码的方式。Unity 根据目标平台支持三种不同的脚本后端:Mono、.NET 和 IL2CPP。 通用 Windows 平台仅支持两种:.NET 和 IL2CPP。
- Mono: 将 C# 代码编译成 .NET 通用中间语言 (CIL) 并使用通用语言运行时执行该 CIL
- IL2CPP: 将 C# 代码编译为 CIL,将 CIL 转换为 C++,然后将 C++ 编译为本机代码,在运行时直接执行。
- API Compatibility Level: 选择在项目中使用的 .NET API。 此设置会影响第三方库的兼容性。
- Use incremental GC:使用增量垃圾收集器,它将垃圾收集分布在多个帧上,以减少与 gc 相关的帧持续时间峰值。
Script Compilation
- Allow ‘unsafe’ Code: 启用对在预定义程序集中编译“不安全”C# 代码的支持(例如,Assembly-CSharp.dll)。
- Use Deterministic Compilation: 禁用此设置以防止使用 -deterministic C# 标志进行编译。 启用此设置后,编译后的程序集在每次编译时都是逐字节相同的。
以及一部分涉及到Roslyn Analyzers的选项,它可以静态地分析代码,并在代码中检测到潜在的错误、漏洞和优化机会
Scripting Define Symbols
脚本编译时的标志设置,能够根据定义在编译阶段包含或者剔除一些代码,示例代码:
#if UNITY_STANDALONE_WIN
Debug.Log("Standalone Windows");
#endif
Platform scripting symbols:(平台标识)
定义 | 含义 |
---|---|
UNITY_EDITOR | 用于从游戏脚本调用Editor下的符号 |
UNITY_EDITOR_XXX | 在XXX平台上的Editor时编译/执行代码 |
UNITY_STANDALONE | 在任意独立平台(Mac OS X, Windows or Linux)上的应用中编译/执行的代码 |
UNITY_STANDALONE_XXX | 在XXX平台上的应用中编译/执行的代码 |
UNITY_XXX | 在XXX平台(除了独立平台外)上的编译/执行的代码 |
Editor version Scripting symbols:(引擎版本标识)
可选择unity版本号,可具体到X_Y_Z任意版本
UNITY_2019 | Unity2019版本,包括2019.Y.Z等所有版本 |
---|---|
UNITY_2019_4 | Unity2019.4版本,包括2019.4.Z等所有版本 |
UNITY_2019_4_14 | Unity2019.4.14版本 |
其余标识:
定义 | 含义 |
---|---|
CSHARP_7_3_OR_NEWER | 支持 C# 7.3 及以上版本 |
ENABLE_MONO | 编译方式为Mono. |
ENABLE_IL2CPP | S编译方式为IL2CPP . |
NET_X_Y | 在Mono和IL2CPP上针对Net对应版本API兼容性生成脚本 |
UNITY_SERVER | 在Build Setting勾选Server Build选项 |
Optimization (优化)
- Prebake Collision Meshes:只在build游戏时添加碰撞盒;
- Keep Loaded Shaders Alive:保证Shader不会被卸载;
- Preloader Assets:预先读取的Assets列表;
- Managed Stripping Level: 决定Unity剥离未使用的托管代码的程度。这会使生成的可执行文件变小,但可能导致错误移除实际上使用的代码
- Vertex Compression: 顶点压缩,选择模型会压缩的数据,比如可以选择everything,然后去掉positions和lightmap UVs。当然每个模型在导入时,该参数可以设置独立,会覆盖掉该选项
- Optimize Mesh Data: 优化Mesh数据,勾选该选项会移除材质所不需要的Mesh数据,例如tangents、normals、colors、UV。
Logging
可以选择在运行脚本(ScriptOnly)、任何时候(Full)或者是从不(None)的时间选择记录类型
Player Setting——Android
大多数比较类似,只介绍重要的差异部分
Resolution and Presentation
Orientation
方向, 自定义与设备上应用程序方向相关的设置。
Setting | Description |
---|---|
Portrait | 纵向,底部与设备顶部对齐 |
Portrait Upside Down | 纵向,底部与设备底部对齐 |
Landscape Right | 横向,左侧与设备顶部对齐 |
Landscape Left | 横向,右侧与设备顶部对齐 |
Auto Rotation | 屏幕可以旋转到您在“Allowed Orientations for Auto Rotation”部分中指定的任何方向。 |
Other Setting
Identification
Property | Function |
---|---|
Override Default Package Name | 表示是否替换掉应用的默认包名——同样会影响macOS,IOS和Android |
Package Name | 设置应用程序 ID,它可以在设备和 Google Play 商店中唯一标识您的应用程序。 应用程序 ID 必须遵循约定 com.YourCompanyName.YourProductName 并且必须仅包含字母数字和下划线字符。 每个段必须以字母字符开头。 |
Version | 输入捆绑包的构建版本号,它标识捆绑包的迭代(已发布或未发布) 版本,以包含由点分隔的数字的字符串的通用格式指定(例如,4.3.2)( iOS 和Android共享) |
Bundle Version Code | 内部版本号,只用于比较哪个版本更新(数字大表示最新),并不展示给用户。可以见x.y转换为整数或者是每次发布版本简单的加1 |