Unity一般打包流程

news2024/11/25 18:56:26

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); 
}

命令行控制

  1. Launching Unity
  2. 首先我们需要在Unity.exe所在目录下执行
  3. 选择对应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_2019Unity2019版本,包括2019.Y.Z等所有版本
UNITY_2019_4Unity2019.4版本,包括2019.4.Z等所有版本
UNITY_2019_4_14Unity2019.4.14版本

其余标识

定义含义
CSHARP_7_3_OR_NEWER支持 C# 7.3 及以上版本
ENABLE_MONO编译方式为Mono.
ENABLE_IL2CPPS编译方式为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

方向, 自定义与设备上应用程序方向相关的设置。

在这里插入图片描述

SettingDescription
Portrait纵向,底部与设备顶部对齐
Portrait Upside Down纵向,底部与设备底部对齐
Landscape Right横向,左侧与设备顶部对齐
Landscape Left横向,右侧与设备顶部对齐
Auto Rotation屏幕可以旋转到您在“Allowed Orientations for Auto Rotation”部分中指定的任何方向。

Other Setting

Identification

在这里插入图片描述

PropertyFunction
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/475946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3源码 第六篇-JavaScript AST transform函数

系列文章目录 Vue3源码 第一篇-总览 Vue3源码 第二篇-Reactive API Vue3源码 第三篇-Vue3是如何实现响应性 Vue3源码 第四篇-Vue3 setup Vue3源码 第五篇-Vue3 模版compile AST生成篇 文章目录 系列文章目录前言一、transform 转换二、traverseNode 遍历节点&#xff0c;trave…

B/S结构系统的会话机制(session)

B/S结构系统的会话机制(session) 文章目录 B/S结构系统的会话机制(session)每博一文案1. session 会话机制的概述2. 什么是 session 的会话3. session 的作用4. session 的实现原理解释5. 补充&#xff1a; Cookie禁用了&#xff0c;session还能找到吗 &#xff1f;6. 总结一下…

PCA学习

前置知识 统计 假设数据集 X ∈ R n m \mathbf{X}\in\mathbb{R}^{n\times m} X∈Rnm,其中 n n n表示样本数量&#xff0c; m m m表示特征个数 均值 X ˉ 1 n e T X 1 n ∑ i 1 n X i \bar{\mathbf{X}} \frac{1}{n}\mathbf{e}^T\mathbf{X} \frac{1}{n} \sum_{i1}^{n}\mat…

[架构之路-178]-《软考-系统分析师》- 分区操作系统(Partition Operating System)概述

目录&#xff1a; 本文概述&#xff1a; 1.1 什么是分区操作系统 1.2 分区操作系统出现背景 1. 前后台系统(Foreground/Background System) 2. 实时操作系统(RTOS) 本文概述&#xff1a; 随着嵌入式系统日趋复杂化以及对安全性要求的不断提高&#xff0c;采用空间隔离、时…

java学习之枚举二

目录 一、enum关键字实现枚举 二、注意事项 一、对Season2进行反编译&#xff08;javap&#xff09; ​编辑 三、练习题 第一题 第二题 一、enum关键字实现枚举 package enum_;public class Enumeration03 {public static void main(String[] args) {System.out.println…

el-upload组件的文件回显功能和添加文件到elupload组件

省流&#xff1a; 先获取这个文件对象&#xff0c;使用handleStart方法添加到组件。 this.$refs.uploadRefName.handleStart(rawfile); 在开发的时候遇到表单里需要上传图片的功能。看了下el-upload组件的使用方法&#xff0c;在修改表单的时候&#xff0c;el-upload组件的回显…

flutter学习之旅(二)

如果不知道怎么安装编写可以查看这篇 创建项目 另一个创建方法 flutter create 项目名热部署 vscode 热部署 vscode很简单&#xff1a;可以通过Debug进行调试 使用flutter查看设备 flutter devices如图所见我现在用的是windows所以&#xff0c;我们检测不到ios因为 我们看…

【Fluent】边界类型总结,什么时候用壁面对(wall-shadow pair)、什么时候用interface?

一、fluent自动生成边界类型的规律 Enclosure是包裹在外面的气体&#xff08;流体&#xff09;&#xff0c;mold是模具&#xff08;固体&#xff09;&#xff0c;sheet是模具上的薄板件&#xff08;固体&#xff09;。 1.1 正向思维 不管是流体域还是固体域&#xff0c;每一…

高度可定制可用于商用目的全流程供应链系统(全部源码)

一、开源项目简介 高度可定制零售供应链中台基础系统&#xff0c;集成零售管理, 电子商务, 供应链管理, 财务管理, 车队管理, 仓库管理, 人员管理, 产品管理, 订单管理, 会员管理, 连锁店管理, 加盟管理, 前端React/Ant Design, 后端Java Spring自有开源框架&#xff0c;全面支…

软件测试之黑盒测试的具体方法详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一.基于需求的设计方法二.等价类三.边界值四.判定表4.1 **关系**4.2 如何设计测试用例4.3 实际案例第一步第二步第三步第四步 五.正交排列5.1 什么是正交表5.2 …

shell脚本的判断式

文章目录 shell脚本的判断式利用test命令的测试功能关于某个文件名的【文件类型】判断关于文件的权限检测两个文件之间的比较关于两个整数之间的比较判定字符串的数据多重条件判定例题 利用判断符号[ ]例题 shell脚本的默认变量($0、$1...)例题shift&#xff1a;造成参数变量号…

Linux安装Mysql操作步骤详解

目录 1. 检测当前系统中是否安装了MySql数据库 2. 使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux 3. 解压并解包到/usr/local/mysql&#xff08;便于区分&#xff09; 第一步&#xff1a;将包先移动到该目录下 第二步&#xff1a;解压解包 第三步&#xff1a…

LeetCode 105.106. 从前序|后序与中序遍历序列构造二叉树 | C++语言版

LeetCode 105. 从前序与中序遍历序列构造二叉树 | C语言版 LeetCode 105. 从前序与中序遍历序列构造二叉树题目描述解题思路思路一&#xff1a;使用递归代码实现运行结果参考文章&#xff1a; 思路二&#xff1a;减少遍历节点数代码实现运行结果参考文章&#xff1a; LeetCode …

C语言复习笔记1

1.不同数据类型所占字节数。 bit 01二进制的比特位 byte 字节 8 bit 比特 之后的单位都是以1024为倍数 #include<stdio.h> #include<unistd.h>int main() {printf("sizeof(char)%d\n",sizeof(char));printf("sizeof(short)%d\n",sizeof(sh…

JavaScript 笔记

1 简介 JavaScript 诞生于1995年&#xff0c;是由网景公司发明&#xff0c;起初命名为LiveScript&#xff0c;后来由于SUN公司的介入&#xff0c;更名为 JavaScript。1996年微软在其最新的IE3浏览器中引入了自己对JavaScript的实现JScript&#xff0c;于是市面上就存在两个版本…

Mybatis 框架 ( 三 ) Mybatis-Plus

4.Mybatis-plus 官网 : https://www.baomidou.com/ MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上封装了大量常规操作&#xff0c;减少了SQL的编写量。 4.1.Maven依赖 使用时通常通过Springboot框架整合使用 并且使用Lombok框架简化实体类 <…

软件测试——基础篇(软件测试的生命周期和BUG的概念)

目录 一、软件测试生命周期 1. 软件生命周期 2. 软件测试生命周期 二、BUG 1. 如何描述一个BUG 2. BUG的级别 3. BUG的生命周期 一、软件测试生命周期 1. 软件生命周期 软件生命周期&#xff1a;需求分析&#xff0c;计划&#xff0c;设计&#xff0c;编码&#xff0c;…

20 printf 的调试

前言 在最开始的 cmd 编程中, 我们会使用到的最常见的输出, 包括一些时候调试的时候 我们最常使用到的函数 那肯定是 printf 了 我们这里来调试一下 这个 printf 还有一个原因是 之前在调试 malloc 的时候, malloc 虚拟内存分配的调试(1) 可以发现, 不仅仅是在 malloc 的时…

Codeforces Round 865 (Div. 2)

6 problems. ABC过, DE没想出来, F没看. https://codeforces.com/contest/1816 A. Ian Visits Mary 分析 - AC 每次跳跃&#xff0c;横纵互质。 限于数据量&#xff0c;不能枚举。 1与任何数互质。考虑从(0,0)跳到(1,y)&#xff0c;这一步一定合法&#xff1b;再从(1,y)跳到…

Netty小白入门教程

一、概述 1.1 概念 Netty是一个异步的基于事件驱动(即多路复用技术)的网络应用框架&#xff0c;用于快速开发可维护、高性能的网络服务器和客户端。 1.2 地位 Netty在Java网络应用框架中的地位就好比&#xff0c;Spring框架在JavaEE开发中的地位。 以下的框架都使用了Nett…