安卓环境配置
安装依赖项
推荐使用Unity Hub进行安装,安装时勾选Android Build Support、Android SDK & NDK Tools、OpenJDK。或者指定已安装的依赖项。(注意:指定的依赖项需要是从UnityHub安装的。比如之前安装Unity2022时勾选了上述依赖项,在全新安装Unity2023时可以指定之前安装的依赖项)
自定义安装
Edit > Preferences > External Tools > Android (macOS: Unity > Settings > External Tools > Android)
设置Android SDK目标API
注意:在Windows平台上选择默认安装位置时,Unity编辑器会安装在(/Program Files/)文件夹下,这时需要以管理员权限运行sdkmanager来更新SDK。
SDK对应版本
Unity version | SDK tools version | SDK Build tools version | SDK Command-line tools version | SDK Platform tools version |
2022.3 LTS | 26.1.1 | 34.0.0 | 6 | 32.0.0 |
2021.3 LTS | 26.1.1 | 32.0.0 | 6 | 32.0.0 |
2020.3 LTS | 26.1.1 | 30.0.2 | 2 | 28.0.1 |
NDK对应版本
Unity version | NDK version |
2022.3 LTS | r23b (23.1.7779620) |
2021.3 LTS | r21d (21.3.6528147) |
2020.3 LTS | r19 (19.0.5232133) |
JDK对应版本
Unity version | JDK version |
2022.3 LTS | 11 (OpenJDK version 11) |
2021.3 LTS | 11 (OpenJDK version 11) |
2020.3 LTS | 8 (OpenJDK version 1.8) |
Android Player settings
渲染在安全区外(Render outside safe area):启用此选项可允许应用程序使用所有可用的屏幕空间进行渲染,包括显示屏上被切掉(有缺口)的区域。有关更多信息,请参阅Android 的显示屏切口支持文档。此设置的行为因Android版本的不同而异,如下表所示。
Android 15及之后 | 此设置无效,因为应用程序默认使用整个屏幕空间。有关更多信息,请参阅Android文档。 |
Android11-14 | 启用后,应用会使用整个可用的屏幕空间。禁用后,仅当挖孔位于系统栏(设备顶部或底部)内时,应用才会使用挖孔周围的空间,否则应用会在挖孔区域上显示黑条。有关应用何时使用挖孔周围空间的更多信息,请参阅Android文档。 |
Android10及之前 | 启用后,应用会使用设备较短边缘(例如顶部或底部)上刘海周围的屏幕空间。但是,应用会用黑条遮挡设备较长边缘(例如侧面)上的刘海。有关应用如何使用较短边缘上刘海周围空间的更多信息,请参阅Android文档。禁用后,仅当刘海位于系统栏内时,应用才会使用刘海周围的空间,否则应用会在刘海区域上显示黑条。有关应用何时使用刘海周围空间的更多信息,请参阅Android文档。 |
优化帧速率(Optimized Frame Pacing)
启用此选项可让 Unity 均匀分布帧,以减少帧速率的变化并创造更流畅的体验(有坑,慎用)。
分辨率缩放(Resolution Scaling)
使用“分辨率缩放”部分自定义与屏幕分辨率缩放相关的设置。使用低于设备原始分辨率的分辨率可以提高性能和延长电池寿命。
Blit Type
控制是否使用blit将最终图像渲染到屏幕上。使用blit与大多数设备兼容,但通常比不使用 blit慢。
Always | Unity渲染到屏幕外缓冲区,然后使用blit将缓冲区的内容复制到设备的帧缓冲区。这兼容大多数设备,但通常比不使用blit更慢。 |
Never | Unity渲染到设备操作系统提供的帧缓冲区。如果失败,应用程序会向设备日志打印一次性警告。这通常比使用blit更快,但并不兼容所有设备。 |
Auto | 如果可能,Unity会渲染到设备操作系统提供的帧缓冲区。如果失败,Unity会向设备控制台打印警告,并使用位块传输将最终图像渲染到屏幕上。 |
渲染(Rendering)
属性 | 描述 |
颜色空间(Color Space) | 选择用于渲染的颜色空间:Gamma或者Linear。请参阅线性渲染概述以了解两者之间的区别(Gamma是历史上标准的色彩空间,linear是显示效果更加精准的色彩空间)。 |
自动图形API(Auto Graphics API) | 禁用此选项可手动选择并重新排序图形API。默认情况下,此选项处于启用状态,Unity会尝试使用Vulkan。如果设备不支持Vulkan,Unity将回退到 GLES3.2、GLES3.1 或 GLES3.0。 重要提示:仅当禁用Auto Graphics API时 GLES2 不在 API 列表中时,Unity才会将GLES3/GLES3.1/AEP/3.2要求添加到您的Android应用清单中。仅在这种情况下,您的应用才不会出现在Google Play商店中不受支持的设备上。 |
Require ES3.1/ES3.1+AEP/Require ES3.2 | 表示OpenGL最低版本要求是否为3.1/3.1+AEP/3.2。 |
颜色色域(Color Gamut) | 您可以添加或删除用于渲染的色域。单击加号(+)图标可查看可用色域列表。色域定义了给定设备(如显示器或屏幕)可用的颜色范围。sRGB色域是默认(和必需)色域。 |
多线程渲染(Multithreaded Rendering) | 启用此功能,可以将图形API调用放在单独的线程中。这有利于优化Unity主线程上CPU性能。 |
静态批处理 | 启用则打开静态批处理。 |
精灵批处理阈值(Sprite Batching Threshold) | 控制批处理最大顶点数阈值。 |
GPU计算蒙皮(GPU Compute Skinning) | 通过着色器在GPU上计算蒙皮和混合,来释放CPU压力,提高性能。 |
图形工作(实验性的)(Graphics Jobs (Experimental)) | 启用此选项可以将图形任务(例如渲染循环)从CPU主线程上卸载至其他核心上的工作线程中。这旨在减少主线程上Camera.Render所花费的时间,这通常是瓶颈。 注意:此功能是实验性的。它可能不会为您的项目带来性能改进,并且可能会引入新的崩溃。 |
图片压缩格式(Texture compression format) | 在ASTC、ETC2和ETC之间进行选择(ETC1适用于RGB,ETC2适用于RGBA)。请参阅纹理压缩格式概述,了解有关如何选择正确格式的更多信息。 请参阅纹理压缩设置,了解有关它如何与构建设置中的纹理压缩设置交互的详细信息。 |
法线贴图编码(Normal Map Encoding) | 修改此设置会影响法线贴图编码设置和压缩设置。DXT5nm-style格式质量更高,但是在着色器中解码的成本更高。 |
光照贴图编码(Lightmap Encoding) | Low Quality,Normal Quality,或者High Quality。会影响光照贴图编码设置和压缩设置 |
光照贴图流(Lightmap Streaming) | 是否对光照贴图使用Mipmap Streaming。Unity在生成光照贴图时会将此设置应用于所有光照贴图。 注意:要使用此设置,必须启用“Texture Streaming Quality”设置。 |
串流优先级(StreamingPriority) | 设置Mipmap Streaming系统中所有光照贴图的优先级。Unity在生成所有光照贴图时会应用此设置。 数值越大优先级越高。有效值范围为-128至127。 |
配置
属性 | 描述 | |||
脚本后端(Scripting Backend) | 脚本后端的选项会决定Unity如何编译处理C#脚本。 | |||
Mono | 将C#代码编译为.NET通用中间语言(CIL),并在运行时使用通用语言执行该CIL。有关更多信息,请参阅Mono。 | |||
IL2CPP | 将C#代码编译为CIL,将CIL转换为C++,然后将C++编译为本机机器代码,该代码在运行时直接执行。有关更多信息,请参阅IL2CPP。 | |||
API兼容级别(API Compatibility Level) | 不同的API几乎不会影响Unity自身代码,但是有可能会影响第三方插件里的C#代码兼容性。假如第三方插件出现兼容性错误,可以尝试修改下面的设置。 | |||
.Net Framework | 与.NET Framework4兼容(其中包括.NET Standard 2.0 配置文件中的所有内容以及其他 API)。使用访问.NET Standard 2.0中未包含的 API 的库时,请选择此选项。他会生成体积更大的版本,并且其附加API不一定在所有平台上都受支持。有关更多信息,请参阅引用其他类库程序集。 | |||
.Net Standard 2.1 | 生成较小的构建并具有完整的跨平台支持。 | |||
IL2CPP代码的生成(IL2CPP Code Generation) | 定义如何生成IL2CPP。这个选项仅在启用了IL2CPP脚本后端时才会显示。 | |||
Faster runtime | 生成针对运行时性能优化的代码。此设置默认启用。 | |||
Faster (smaller) builds | 生成针对构建大小和迭代优化的代码。此设置会生成较少的代码并生成较小的构建,但会降低通用代码的运行时性能。对构建时间要求高的话(例如在对更改进行迭代时),请使用此选项。 | |||
C++编译配置(C++ Compiler Configuration) | 设置IL2CPP在编译时的配置 | |||
Debug | 关闭所有优化,代码构建会更快但运行会更慢。 | |||
Release | 启用优化,编译后的代码运行更快,二进制文件更小,但编译时间长。 | |||
Master | 启用所有可能的优化,尽可能地提高性能。例如,在使用 MSVC++ 编译器的平台上,此选项可启用链接时代码生成。使用此配置编译代码所需的时间可能比使用 Release 配置所需的时间长得多。如果构建时间的增加可以接受,Unity 建议使用 Master 配置构建游戏的正式版。 | |||
使用增量GC(Use incremental GC) | 增量GC会将垃圾回收分散在多个帧上,以减少某个帧持续垃圾回收造成的峰值。有关更多信息,请参阅自动内存管理。 | |||
允许通过HTTP下载(Allow downloads over HTTP) | 默认不允许,因为HTTPS更加安全。 | |||
停用后台音频(Mute Other Audio Sources) | 启用时当游戏进入前台时会停止播放其他后台音乐。 | |||
按目标架构拆分APK(Split APKs by target architecture) | 启用后可根据不同CPU架构去生成不同的APK,使得Google Play用户可以下载更小的包体。这个功能主要适用于Google Play商店,其他商店不一定支持。具体可参阅多版本APK支持。 | |||
安装位置(Install Location) | 指定应用程序在设备上的安装位置(有关详细信息,请参阅Android 开发者文档中的安装位置。) | |||
Automatic | 由操作系统决定,且用户可以来回切换。 | |||
Prefer External | 如果可以,游戏会优先安装至外部储存。反之会安装在内置储存中。 | |||
Force Internal | 强制安装在内部储存中,且不支持切换至外部储存。 | |||
着色器设置
属性 | 描述 | |
着色器精度模型(Shader Precision Model) | 设置默认着色器精度。更多信息可以参考使用16位精度着色器。 | |
Platform default | 移动平台上使用低精度,其他平台上使用高精度。 | |
Unified | 如果平台支持,则使用低精度。 | |
Use platform defaults for sampler precision | 优点: 使用目标平台的默认采样器精度。通常在高端设备上选择高精度,在低端设备上选择低精度。提供较好的性能和兼容性平衡。 缺点: 不完全可控,不同平台的表现可能不一致。 | |
Use full sampler precision by default, lower precision explicitly declared | 强制使用高精度(Full Precision)作为采样器的默认精度,只有在着色器中明确声明时才使用低精度。 优点: 确保最高的视觉质量,避免因低精度导致的采样伪影或视觉瑕疵。 缺点: 可能会增加性能消耗,特别是在低端设备上会更明显。 | |
使已加载的 Shader始终处于活跃 | 保持所有已加载的着色器处于活跃状态并防止被卸载。有关详细信息,请参阅着色器加载。 |
着色器变体加载的设置(Shader Variant Loading Settings)
使用这些设置来控制着色器在运行时的内存使用量。
属性 | 描述 |
默认块大小(Default chunk size (MB)) | 设置Unity在您构建的应用程序中为所有平台存储的压缩着色器变体数据块的最大大小。默认值为16。有关更多信息,请参阅着色器加载。 |
默认块数(Default chunk count) | 设置Unity在所有平台上保留在内存中的解压缩块数量的默认限制。默认值为0,表示没有限制。 |
覆盖(Override) | 允许覆盖此构建目标的默认块大小和默认块数。 |
脚本编译
优化
属性 | 描述 | |
预烘焙碰撞网格(Prebake Collision Meshes) | 在构建时向网格添加碰撞数据。 | |
预加载资产(Preloaded Assets) | 设置播放器在启动时要加载的资源数组。要添加新资源,请增加Size 属性的值,然后在出现的新元素框中设置要加载的资源的引用。 | |
剥离引擎代码(Strip Engine Code) | 如果您希望Unity Linker工具删除项目未使用的Unity Engine功能的代码,请启用此选项。此设置仅适用于IL2CPP 脚本后端。 大多数应用程序不会使用每个可用的DLL。此选项会删除应用程序未使用的 DLL,以减小构建的播放器的大小。如果您的应用程序正在使用一个或多个在当前设置下通常会被删除的类,则当您尝试构建应用程序时,Unity会显示一条调试消息。 | |
设置剥离级别(Managed Stripping Level) | 选择Unity剥离未使用的托管 (C#) 代码的等级。选项包括Minimal、Low、Medium和High。 当Unity构建您的应用时,Unity Linker进程可以从您的项目使用的托管DLL 中剥离未使用的代码。剥离代码可以使生成的可执行文件显著变小,但有时可能会意外删除正在使用的代码。 有关这些选项和使用 IL2CPP 剥离字节码的更多信息,请参阅ManagedStrippingLevel。 | |
不同等级的区分 | Disabled | 不剥离任何代码。 |
Low | 删除无法访问的托管代码以减少构建大小和Mono/IL2CPP 构建时间。 | |
Medium | 在比Low更不保守的模式下运行UnityLinker。这将进一步减少Low无法实现的代码大小。但是,这种额外的减少可能伴随着一些权衡。可能的副作用包括必须维护自定义 link.xml 文件,并且某些反射代码路径的行为可能不同。 | |
High | UnityLinker将尽可能地精简代码。这将进一步减少Medium 无法实现的代码大小。但是,这种额外的减少可能会带来一些权衡。可能的副作用包括,某些方法的托管代码调试可能不再有效。您可能需要维护自定义link.xml 文件,并且某些反射代码路径的行为可能不同。 | |
Minimal | 类库、UnityEngine和Windows运行时程序集将被剥离。所有其他程序集都将被复制。 | |
顶点压缩(Vertex Compression) | 设置每个通道的顶点压缩。这会影响项目中的所有网格。 通常,顶点压缩用于减少内存中的网格数据大小、减小文件大小并提高GPU 性能。 有关如何配置顶点压缩以及此设置的限制的更多信息,请参阅压缩网格数据。 | |
优化网格数据(Optimize Mesh Data) | 启用此选项可从构建中使用的网格中剥离未使用的顶点属性。此选项可减少网格中的数据量,从而有助于减少构建大小、加载时间和运行时内存使用量。 警告:如果启用了此设置,请记住不要在运行时更改材质或着色器设置。 有关更多信息,请参阅PlayerSettings.stripUnusedMeshComponents。 | |
剥离纹理 MipMap(Texture MipMap Stripping) | 为所有平台启用mipmap剥离。这会在构建时从纹理中剥离未使用的 mipmap。Unity通过将mipmap的值与当前平台的Quality Setting进行比较来确定未使用的mipmap。如果mipmap值被排除在当前平台的每个Quality Setting之外,则Unity会在构建时从构建中剥离这些mipmap。如果QualitySettings.masterTextureLimit设置为已剥离的mipmap值,则Unity会将该值设置为未剥离的最接近的mipmap值。 |
注:文章摘要翻译自Unity官方手册,版本2022.3x。